题目链接:链表求和
题目描述:
示例:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:假设这些数位是正向存放的,请再做一遍。
示例:
输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912
分析:主要是这个while的判断条件写的很棒,省去了很多判断细节,比如一个链表遍历完,最后一位进位的处理
/**
* 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 p = l1,q = l2,newHead = new ListNode(-1);
ListNode t = newHead;
int carry = 0,sum = 0;
while(p!=null||q!=null||carry!=0){
sum = 0;
if(p!=null){
sum += p.val;
p = p.next;
}
if(q!=null){
sum += q.val;
q = q.next;
}
sum+=carry;
carry = sum/10;
ListNode no = new ListNode(sum%=10);
t.next = no;
t = t.next;
}
return newHead.next;
}
}