/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: //ReverseList用于翻转链表 ListNode* ReverseList(ListNode* head) { ListNode* n1 = nullptr; ListNode* n2 = head; if (n2 == nullptr) { return head; } ListNode* n3 = head->next; while (n2) { n2->next = n1; n1 = n2; n2 = n3; if (n2)//这里需要注意 n3 = n2->next; } return n1; } ListNode* addInList(ListNode* head1, ListNode* head2) { // write code here ListNode* ptr1 = ReverseList(head1);//9->3->7 ----- 7->3->9 ListNode* ptr2 = ReverseList(head2);//6->3 ----- 3->6 int ret = 0; ListNode* head = nullptr;//相加之后的链表 ListNode* ptr = head; int count = 1;//用来记录头节点 while (ptr1 || ptr2) { int sum = 0; if (ptr1) { sum += ptr1->val; ptr1 = ptr1->next; } if (ptr2) { sum += ptr2->val; ptr2 = ptr2->next; } sum += ret; //创建节点; ListNode* cur = new ListNode(sum % 10); if (count == 1) { head = cur; ptr = head; ret = sum / 10; count++; } else { ptr->next = cur; ptr = cur; ret = sum / 10; } } if (ret) { ListNode* cur = new ListNode(ret); ptr->next = cur; } return ReverseList(head);//最后需要将链表翻转 } };