📅  最后修改于: 2023-12-03 15:23:03.646000             🧑  作者: Mango
这是一道关于数据结构的编程题,需要对链表进行操作。
给定两个链表,每个链表表示一个整数,链表的每个节点代表该整数的一位数。现在要将这两个整数相加,并将其结果以链表形式返回。
例如:
链表的节点定义为:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
实现函数:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2);
两个链表,其中每个节点的值都是0-9的整数。
一个新的链表,其表示两个整数相加的结果。
输入:
(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:
7 -> 0 -> 8
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int carry = 0;
ListNode* dummyHead = new ListNode(0);
ListNode* p = dummyHead;
while (l1 || l2) {
int val1 = l1 ? l1->val : 0;
int val2 = l2 ? l2->val : 0;
int sum = val1 + val2 + carry;
carry = sum / 10;
p->next = new ListNode(sum % 10);
p = p->next;
if (l1) l1 = l1->next;
if (l2) l2 = l2->next;
}
if (carry) p->next = new ListNode(1);
return dummyHead->next;
}
};
以上代码实现了两个链表的相加操作,时间复杂度为 O(max(m,n)),其中 m、n 分别为两个链表的长度。