先反转链表,然后逐个加和并计算进位,最后再反转回来。
class Solution {
public:
ListNode* reverse(ListNode* head)
{
ListNode *pre = nullptr, *cur = head, *next = nullptr;
while(cur != nullptr)
{
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
ListNode* addInList(ListNode* head1, ListNode* head2) {
head1 = reverse(head1);
head2 = reverse(head2);
int keta = 0, bit = 0;
ListNode* pHead = head1, *pre1 = nullptr;
while(head1 != nullptr && head2 != nullptr)
{
int temp = head1->val + head2->val + keta;
keta = temp / 10;
bit = temp % 10;
head1->val = bit;
pre1 = head1, head1 = head1->next;
head2 = head2->next;
}
if(head1 == nullptr)
pre1->next = head2;
ListNode *tsuzuki = pre1->next;
while(keta == 1 && tsuzuki != nullptr)
{
int temp = tsuzuki->val + keta;
keta = temp / 10;
bit = temp % 10;
tsuzuki->val = bit;
if(keta == 1 && tsuzuki->next == nullptr)
{
tsuzuki->next = new ListNode(1);
keta = 0;
}
tsuzuki = tsuzuki->next;
}
return reverse(pHead);
}
};


京公网安备 11010502036488号