题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ // 反转链表 struct ListNode* reverseList(struct ListNode* head) { struct ListNode* prev = NULL; struct ListNode* current = head; while (current != NULL) { struct ListNode* next = current->next; current->next = prev; prev = current; current = next; } return prev; } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ struct ListNode* addInList(struct ListNode* head1, struct ListNode* head2 ) { // write code here // 反转链表 struct ListNode* reversedHead1 = reverseList(head1); struct ListNode* reversedHead2 = reverseList(head2); struct ListNode* result = NULL; // 存储结果的链表头节点 struct ListNode* current = NULL; // 当前节点 int carry = 0; // 进位 // 遍历两个链表,进行相加操作 while (reversedHead1 != NULL || reversedHead2 != NULL || carry != 0) { int sum = carry; if (reversedHead1 != NULL) { sum += reversedHead1->val; reversedHead1 = reversedHead1->next; } if (reversedHead2 != NULL) { sum += reversedHead2->val; reversedHead2 = reversedHead2->next; } // 创建新节点 struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); newNode->val = sum % 10; carry = sum / 10; newNode->next = NULL; // 连接节点 if (result == NULL) { result = newNode; current = newNode; } else { current->next = newNode; current = current->next; } } // 反转结果链表 result = reverseList(result); return result; }