/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
ListNode* reverse_list(ListNode* head)
{
ListNode* newhead = new ListNode(0);
ListNode* cur = head;
while(cur)
{
ListNode* tmp = cur->next;
cur->next = newhead->next;
newhead->next = cur;
cur = tmp;
}
cur = newhead->next;
delete newhead;
return cur;
}
ListNode* addInList(ListNode* head1, ListNode* head2)
{
head1 = reverse_list(head1);
head2 = reverse_list(head2);
int index = 0;
ListNode* newhead = new ListNode(0);
ListNode* cur = newhead;
while(head1 || head2)
{
int val = index;
if(head1)
{
val += head1->val;
head1 = head1->next;
}
if(head2)
{
val += head2->val;
head2 = head2->next;
}
cur->next = new ListNode(val % 10);
cur = cur->next;
index = val / 10;
}
if(index) cur->next = new ListNode(index);
cur = newhead->next;
delete newhead;
return reverse_list(cur);
}
};
这道题只需要一个辅助函数, 也就是非常经典的反转链表的函数:
我的解法思路很清晰, 就是模拟
1 将两个链表进行反转, 从个位数开始加
2 添加进位标识符 index , 表示是否有无进位
3 最后判断进位标识符是否为空, 否则直接新建一个节点
4 最后最后, 一定要反转一下整个链表, 因为我这个是反转链表进行计算的
5 没有最后完成啦

京公网安备 11010502036488号