📌  相关文章
📜  用于添加由链表表示的两个数字的 C++ 程序 - 集 2(1)

📅  最后修改于: 2023-12-03 14:56:21.826000             🧑  作者: Mango

用于添加由链表表示的两个数字的 C++ 程序 - 集 2

在这篇文章中,我们将介绍如何创建一个 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++ 中操作链表,并将其应用于实际的编程问题中。