题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode *reverseList(ListNode *head) {
if (!head || !head->next) {
return head;
}
ListNode *nxt = head->next;
ListNode *res = reverseList(nxt);
nxt->next = head;
head->next = nullptr;
return res;
}
ListNode* addInList(ListNode* head1, ListNode* head2) {
if (!head1) return head2;
if (!head2) return head1;
head1 = reverseList(head1);
head2 = reverseList(head2);
ListNode *dummyhead = new ListNode(0), *tail = dummyhead;
int up = 0;
while (head1 && head2) {
head1->val += head2->val + up;
up = head1->val / 10;
head1->val %= 10;
tail->next = head1;
tail = head1;
head1 = head1->next;
head2 = head2->next;
}
if (!head1) head1 = head2;
while (head1) {
head1->val += up;
up = head1->val / 10;
head1->val %= 10;
tail->next = head1;
tail = head1;
head1 = head1->next;
}
if (up) {
tail->next = new ListNode(1);
}
ListNode *res = dummyhead->next;
dummyhead->next = nullptr;
return reverseList(res);
}
};
思路:同样是先反转链表,然后模拟加法,最后再反转回去。
因为链表与数组不同,最后注意如果有进位的话,是需要新建一个链表节点的。

