题意
用链表来表示非负整数,链表的每个节点存储整数的一个数位,且是逆序存储的。
计算两个数相加,返回和的链表。
题解
逆序存储的好处是计算方便, 链表的第一个节点就是个位,这样只需直接遍历就好了。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if(!l1) return l2;
if(!l2) return l1;
int carry = 0, sum = 0;
ListNode* lhead = l1;
ListNode* rhead = l2;
ListNode* rehead = new ListNode(-1); //作头节点用,为插入方便
ListNode* p = rehead;
while(lhead && rhead){
sum = lhead->val + rhead->val + carry;
carry = sum / 10;
sum %= 10;
ListNode * node = new ListNode(sum);
p->next = node;
p = p->next;
lhead = lhead->next;
rhead = rhead->next;
}
while(lhead){
sum = lhead->val + carry;
carry = sum / 10;
sum %= 10;
ListNode * node = new ListNode(sum);
p->next = node;
p = p->next;
lhead = lhead->next;
}
while(rhead){
sum = rhead->val + carry;
carry = sum / 10;
sum %= 10;
ListNode * node = new ListNode(sum);
p->next = node;
p = p->next;
rhead = rhead->next;
}
if(carry){ //别忘了最后可能的进位
ListNode* node = new ListNode(carry);
p->next = node;
p = p->next;
}
return rehead->next;
}
};