//首先反转了两个链表,然后从头部开始相加链表的节点值,直到两个链表都为空且进位为0为止。在相加过程中创建新的节点,并将它们连接到结果链表。
typedef struct ListNode ListNode;
class Solution
{
public:
ListNode* addInList(ListNode* head1, ListNode* head2)
{
// 首先反转两个链表
ListNode* reversedHead1 = reverseList(head1);
ListNode* reversedHead2 = reverseList(head2);
ListNode* result = nullptr;
int carry = 0;
// 相加链表节点值,直到两个链表都为空且进位为0为止
while (reversedHead1 || reversedHead2 || carry) {
int sum = (reversedHead1 ? reversedHead1->val : 0) + (reversedHead2 ? reversedHead2->val : 0) + carry;
carry = sum / 10;
sum %= 10;
// 创建新节点并连接到结果链表
ListNode* newNode = new ListNode(sum);
newNode->next = result;
result = newNode;
// 移动到下一个节点
if (reversedHead1) reversedHead1 = reversedHead1->next;
if (reversedHead2) reversedHead2 = reversedHead2->next;
}
return result;
}
// 辅助函数:反转链表
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr) {
ListNode* nextNode = curr->next;
curr->next = prev;
prev = curr;
curr = nextNode;
}
return prev;
}
};