/** * 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); } };
思路:同样是先反转链表,然后模拟加法,最后再反转回去。
因为链表与数组不同,最后注意如果有进位的话,是需要新建一个链表节点的。