📅  最后修改于: 2023-12-03 14:56:21.826000             🧑  作者: Mango
在这篇文章中,我们将介绍如何创建一个 C++ 程序,用于在链表表示的两个数字中进行相加操作。这个程序的基本思路是,将两个链表中的数字逐位相加,并将结果存储在一个新链表中。
在这个程序中,我们将使用一个自定义的链表数据结构,它由一个 ListNode 类表示。这个类包括两个成员变量:一个整数值 val
和一个指向下一个 ListNode 对象的指针 next
。
class ListNode {
public:
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
我们将定义一个名为 addTwoNumbers
的函数,该函数将执行两个链表中数字的相加操作。该函数将以指向链表头部的指针作为参数,并返回一个新的 ListNode 对象。
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(0);
ListNode* node = head;
int carry = 0;
while (l1 != nullptr || l2 != nullptr || carry != 0) {
int sum = (l1 != nullptr ? l1->val : 0) + (l2 != nullptr ? l2->val : 0) + carry;
carry = sum / 10;
node->next = new ListNode(sum % 10);
node = node->next;
l1 = l1 != nullptr ? l1->next : nullptr;
l2 = l2 != nullptr ? l2->next : nullptr;
}
return head->next;
}
在该函数中,我们首先创建一个新的链表头部对象 head
,并将 node
指向该对象。我们还定义了一个 carry
变量,用于存储上一个数字的进位值。
然后,我们开始遍历两个链表,直到它们的所有节点都被处理。在每次迭代中,我们将链表中对应节点的值相加,并加上上一个数字的进位值 carry
。将数字相加的和除以10,得到进位值 carry
并且将余数添加到新的链表中。最后,我们将指向链表头部的指针 node
移动到下一个节点。
我们还需要编写一个测试程序来验证我们的 addTwoNumbers
函数是否按预期工作。以下是一个简单的测试程序,该程序创建了两个链表对象,调用 addTwoNumbers
函数并打印结果。
int main() {
// Create two linked lists
ListNode* l1 = new ListNode(2);
l1->next = new ListNode(4);
l1->next->next = new ListNode(3);
ListNode* l2 = new ListNode(5);
l2->next = new ListNode(6);
l2->next->next = new ListNode(4);
// Add two numbers and print the result
ListNode* result = addTwoNumbers(l1, l2);
while (result != nullptr) {
std::cout << result->val << " ";
result = result->next;
}
return 0;
}
输出结果应该是 7 0 8
。
在本篇文章中,我们介绍了如何创建一个 C++ 程序,用于在链表表示的两个数字中进行相加操作。该程序包括自定义的链表数据结构、数字相加的函数和一个用于测试的程序。我们希望这篇文章能够帮助你了解如何在 C++ 中操作链表,并将其应用于实际的编程问题中。