📅  最后修改于: 2023-12-03 14:59:49.479000             🧑  作者: Mango
链表是一种常用的数据结构,用于表示各种复杂的问题。本题要求我们实现一个C++程序,在链表中表示两个数字,然后将它们相加,最后返回一个新链表表示结果。
给定两个由链表表示的非负整数,每个节点表示其中的一位数字,按逆序顺序排列(也就是个位在前,最高位在最后)。请将这两个数相加并以链表形式返回。
例如:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
对于一个链表定义,通常都需要声明一个结构体来代表节点。我们可以定义一个LinkedListNode结构体,包含一个value成员表示当前节点的数值,以及一个next指针成员表示后继节点。
struct LinkedListNode {
int value;
LinkedListNode* next;
LinkedListNode(int val) : value(val), next(NULL) {}
};
我们可以定义两个指针,分别指向两个链表的头节点。然后,我们从两个链表的头节点开始遍历,依次将对应的数字相加,并且需要考虑进位。最后,我们将所有的求和结果通过节点相连形成一个新链表,也可以使用虚拟头节点来简化实现。
LinkedListNode* addTwoNumbers(LinkedListNode* l1, LinkedListNode* l2) {
LinkedListNode *p1 = l1, *p2 = l2, *dummy = new LinkedListNode(0), *curr = dummy;
int carry = 0;
while (p1 || p2 || carry) {
int val1 = p1 ? p1->value : 0;
int val2 = p2 ? p2->value : 0;
int sum = val1 + val2 + carry;
carry = sum / 10;
curr->next = new LinkedListNode(sum % 10);
curr = curr->next;
if (p1) p1 = p1->next;
if (p2) p2 = p2->next;
}
return dummy->next;
}
struct LinkedListNode {
int value;
LinkedListNode* next;
LinkedListNode(int val) : value(val), next(NULL) {}
};
LinkedListNode* addTwoNumbers(LinkedListNode* l1, LinkedListNode* l2) {
LinkedListNode *p1 = l1, *p2 = l2, *dummy = new LinkedListNode(0), *curr = dummy;
int carry = 0;
while (p1 || p2 || carry) {
int val1 = p1 ? p1->value : 0;
int val2 = p2 ? p2->value : 0;
int sum = val1 + val2 + carry;
carry = sum / 10;
curr->next = new LinkedListNode(sum % 10);
curr = curr->next;
if (p1) p1 = p1->next;
if (p2) p2 = p2->next;
}
return dummy->next;
}