题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ ListNode* addInList(ListNode* head1, ListNode* head2) { ListNode* post = nullptr; head1 = reverseList(head1); head2 = reverseList(head2); int increment = 0, val1 = 0, val2 = 0; while (head1 || head2) { if (head1) { val1 = head1->val; head1 = head1->next; } else val1 = 0; if (head2) { val2 = head2->val; head2 = head2->next; } else val2 = 0; int temp = val1 + val2 + increment; increment = temp / 10; temp = temp % 10; auto node = new ListNode(temp); if (post) { node->next = post; post = node; } else post = node; } if (increment) { auto node = new ListNode(increment); node->next = post; post = node; } return post; } ListNode* reverseList(ListNode* head) { if (!head) return nullptr; ListNode *left = nullptr, *curr = head, *right = nullptr; while (curr) { right = curr->next; curr->next = left; left = curr; curr = right; } return left; } };
先反转,再逐位相加(记得进位)。