1. 每日一题
给定两个用链表表示的非负整数,每个节点包含一个数字,这些数字是反向存储的,即个位数字在链表头部。请你将这两个数相加,并以链表形式返回结果。
示例:
输入:(9 -> 1 -> 6) + (5 -> 9 -> 2),即 617 + 295
输出:2 -> 1 -> 9,即 912
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4),即 342 + 465
输出:7 -> 0 -> 8,即 807
struct ListNode{
int val;
ListNode* next;
ListNode():val(0), next(nullptr){}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummyHead = new ListNode(0);
ListNode* current = dummyHead;
int carry = 0;
while (l1 != nullptr || l2 != nullptr || carry > 0) {
int val1 = (l1 != nullptr) ? l1->val : 0;
int val2 = (l2 != nullptr) ? l2->val : 0;
int total = val1 + val2 + carry;
carry = total / 10; // 计算进位
current->next = new ListNode(total % 10); // 创建新节点
current = current->next; // 移动到下一个节点
if (l1 != nullptr) l1 = l1->next; // 移动链表 l1
if (l2 != nullptr) l2 = l2->next; // 移动链表 l2
}
return dummyHead->next; // 返回结果链表的头节点
}