题解 | #链表相加(二)#
链表相加(二)
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) {
// write code here
head1 = ReverseList(head1);
head2 = ReverseList(head2);
ListNode LL = ListNode(-1);
ListNode* RetPhead = ≪
ListNode* ret = RetPhead;
int Carry = 0;
int h1 = 0;
int h2 = 0;
while (head1 || head2) {
h1 = head1 == nullptr ? 0 : head1->val;
h2 = head2 == nullptr ? 0 : head2->val;
ret->next = new ListNode( (h1 + h2 + Carry) % 10 );
Carry = (h1 + h2 + Carry) / 10;
ret = ret->next;
if(head1) head1 = head1->next;
if(head2) head2 = head2->next;
}
if(Carry){
ret->next = new ListNode(1);
ret = ret->next;
}
return ReverseList(RetPhead->next);
}
ListNode* ReverseList(ListNode* head) {
if(!head || !head->next) return head;
ListNode* Pre = nullptr,*Phead = head,*temp = nullptr;
while (Phead) {
temp = Phead->next;
Phead->next = Pre;
Pre = Phead;
Phead = temp;
}
return Pre;
}
};