两数相加

小二上酒...大约 1 分钟leetcode链表

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

代码如下:

public class P2_AddTwoNumbers{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 Solution solution = new P2_AddTwoNumbers().new Solution();
	 	 ListNode l11=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l21=new P2_AddTwoNumbers().new ListNode(1);
		 ListNode l22=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l23=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l24=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l25=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l26=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l27=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l28=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l29=new P2_AddTwoNumbers().new ListNode(9);
		 ListNode l30=new P2_AddTwoNumbers().new ListNode(9);
		 l21.next=l22;
		 l22.next=l23;
		 l23.next=l24;
		 l24.next=l25;
		 l25.next=l26;
		 l26.next=l27;
		 l27.next=l28;

		 ListNode result = solution.addTwoNumbers(l11, l21);
		 while(result!=null){
			 System.out.println(result.val);
			 result=result.next;
		 }
	 }

	class ListNode {
		int val;
		ListNode next;
		ListNode() {}
		ListNode(int val) { this.val = val; }
		ListNode(int val, ListNode next) { this.val = val; this.next = next; }
	}
	

    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode result=new ListNode(-1);
            ListNode temp=result;
            ListNode l1Node=l1;
            ListNode l2Node=l2;
            int add=0;
            while(l1Node!=null || l2Node!=null){
                int l1NodeVal;
                int l2NodeVal;
                if(l1Node==null){
                    l1NodeVal=0;
                }else{
                    l1NodeVal=l1Node.val;
                    l1Node=l1Node.next;
                }
                if(l2Node==null){
                    l2NodeVal=0;
                }else{
                    l2NodeVal=l2Node.val;
                    l2Node=l2Node.next;
                }
                int sum=l1NodeVal+l2NodeVal+add;
                int val=sum%10;
                add=sum/10;
                ListNode next=new ListNode(val);
                temp.next=next;
                temp=next;
            }
            if(add>0){
                temp.next=new ListNode(add);
            }
            return result.next;
        }
    }

}
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.7