题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ //转置这个链表 void ReserveList(ListNode*& head) { if(head == nullptr) return ; ListNode* virhead = new ListNode(0); virhead->next = nullptr; ListNode* ss = head; ListNode* ssnext; while(ss!=nullptr) { ssnext = ss->next; ss->next = virhead->next; virhead->next = ss; ss = ssnext; } head = virhead->next; delete virhead; } ListNode* addInList(ListNode* head1, ListNode* head2) { // write code here ListNode* virhead = new ListNode(0); ListNode* p = head1; ListNode* q = head2; ReserveList(q); ReserveList(p); int sum = 0; while(p != nullptr && q != nullptr) { sum += p->val+q->val; ListNode* addNode = new ListNode(sum%10); addNode->next = virhead->next; virhead->next = addNode; sum /= 10; p = p->next; q = q->next; } while(p!=nullptr) { sum +=p->val; ListNode* addNode = new ListNode(sum%10); addNode->next = virhead->next; virhead->next = addNode; sum /= 10; p = p->next; } while(q!=nullptr) { sum += q->val; ListNode* addNode = new ListNode(sum%10); addNode->next = virhead->next; virhead->next = addNode; sum /= 10; q = q->next; } //判断还有没有进位,有就将头结点也当作值 if(sum==0) { q = virhead->next; delete virhead; } else { virhead->val = sum; q = virhead; } return q; } };