题目描述:
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
示例:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
思路
记录这个题目的目的主要是为了保存这个思路:当我们需要同时遍历两个链表时,我们往往想到遍历到较短链表处结束,然后再处理剩下的部分,但实际上我们是可以想办法直接遍历完两链表的。
代码
/**
* 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 res = new ListNode(-1); //空表用于存放输出
ListNode cur = res; //尾插法的标志
int c = 0, sum = 0;
while(l1!=null || l2!=null || c!= 0){ //链表1没结束或链表2没结束或当前位没有进位
int val1 = (l1==null?0:l1.val);
int val2 = (l2==null?0:l2.val);
sum = val1 + val2 + c;
c = sum/10;
cur.next = new ListNode(sum%10);
l1 = l1==null?null:l1.next;
l2 = l2==null?null:l2.next;
cur = cur.next;
}
return res.next;
}
}