LeetCode 2.两数相加 Java实现

题目

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路

在一条链表上进行计算,将所得结果赋值在两条链表对应的位置上,把长的那条链表赋值给要输出的链表,再对链表中val超过10的数字进行处理,因为两个个数相加不可能超过18,所以只有进1的可能,如果最后一位还要进位,要先创建一个val为1的NodeList类型的值,把它连在要输出的链表的尾端。

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode n1=l1;
        ListNode n2=l2;
        while(true){
            if(n1==null||n2==null)
                break;
            n1.val+=n2.val; // 将两条链表对应的位置相加,再赋值到两条链表的对应位置上
            n2.val=n1.val;
            n1=n1.next;
            n2=n2.next;
        }
        ListNode out;
        if(n1==null){ // 将长的那条链表赋值给要输出的链表
            out=l2;
        }else{
            out=l1;
        }
        ListNode n3=out;
        while(n3.next!=null){ // 将超过10的数字向后进一位
            if(n3.val>=10){
                n3.next.val++;
                n3.val-=10;
            }
            n3=n3.next;
        }
        if(n3.val>=10){ // 如果最后一位还有进位,先创建一个节点放在后面再连接
            n3.next=new ListNode(1);
            n3.val-=10;
        }
        return out;
    }
}

 

点赞