面试题02.05 链表求和

题目
给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

题解

遍历两个链表,也就是遍历每个节点,
当两个节点至少有一个不是null或者进位不是0的条件下
需要创建新的节点,每个新节点的值为 (进位+非空节点值) %10
进位数为(进位+非空节点值) /10
如果上述三个条件都不满足,那么说明两个节点都是null,并且进位是0,那么就不需要产生新的节点
直接返回初始节点即可

class Solution {
    
    public ListNode addTwoNumbers(ListNode l1,ListNode l2){
        //创建返回节点
        ListNode result = new ListNode(0);
        ListNode p = result;

        //初始化进位值0
        int carry = 0;
        //遍历两个链表,当l1和l2至少有一个不是null或者carry!=0
        //才需要创建新的节点
        while(l1 != null || l2!=null || carry !=0){
            //如果l1!=null,计算当前位需要加上l1的值
            if(l1!=null){
                carry += l1.val;
                l1 = l1.next;
            }

            if(l2!=null){
                carry += l2.val;
                l2 = l2.next;
            }

            p.next = new ListNode(carry % 10);
            carry /= 10;
            p = p.next;
        }
        return result.next;
    }
    
}
原文地址:https://www.cnblogs.com/windWheel/p/15781496.html