可以参考大数相加,只不过加上了链表反转的思想,总的来说就是模板题
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
//先翻转两个链表然后再相加,结果再反转
ListNode* pre = nullptr;
ListNode* cur = head1;
ListNode* next;
while(cur != nullptr){
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
//此时pre就是新的头
head1 = pre;
pre = nullptr;
cur = head2;
while(cur != nullptr){
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
head2 = pre;
int sum = 0, carry = 0;
int a,b;
ListNode* head = new ListNode(0);
ListNode* tmp = head;
while(head1!= nullptr || head2!=nullptr ||carry != 0){
if(head1 == nullptr){
a = 0;
}
else{
a = head1->val;
head1 = head1->next;
}
if(head2 == nullptr){
b = 0;
}
else{
b = head2->val;
head2 = head2->next;
}
sum = (a+b+carry)%10;
carry = (a+b+carry)/10;
ListNode* node = new ListNode(sum);
tmp->next = node;
tmp = node;
}
pre = nullptr;
cur = head->next;
while(cur != nullptr){
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
};