链表加法,类似大数加法
模拟加法,从低位到高位,注意进位处理,以及指针的移动
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
l1 = reverse(l1), l2 = reverse(l2);
ListNode* dummy = new ListNode(0), *cur = dummy;
int t = 0;
while(l1 || l2 || t) {
if(l1)t += l1->val, l1=l1->next;
if(l2)t += l2->val, l2=l2->next;
ListNode* node = new ListNode(t%10);
t = t/10;
cur = cur->next = node;
}
return reverse(dummy->next);
}
ListNode* reverse(ListNode* head) {
ListNode* prev = nullptr;
while(head) {
ListNode* next = head->next;
head->next = prev;
prev = head;
head = next;
}
return prev;
}
};