原题出处https://leetcode-cn.com/problems/add-two-numbers/,描述如下图: 解题思路很简单:当前两个链表的节点node1和node2形成的新节点的值的算法为
//上一个节点的进位,比如3+9=12,进位为1 (进位的英文翻译carry)
int carry=(preNode1.val+preNode2)/10;
int sum = node1.val+node2.val+carry;
//比如4+6=10,去余则为0
Node newNode = New Node(sum%10)
所以完整的算法为:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode();
ListNode sumNode = result;
//进位,比如3+9=12,进位1,算法是sum/10,将2存储在新节点 算法是sum%10
int carry = 0;
while(l1!=null||l2!=null||carry!=0) {
int sum = 0;
if(l1!=null) {
sum+=l1.val;
l1=l1.next;
}
if(l2!=null) {
sum += l2.val;
l2 = l2.next;
}
//加上个循环的进位
sum+=carry;
//取当前循环的进位
carry = sum/10;
ListNode newNode = new ListNode(sum%10);
sumNode.next = newNode;
sumNode = newNode;
}
return result.next;
}