当前位置: 首页 > 科技迭代

C++实现从标准输入读取两个链表并存储在向量中的函数

时间:2024-02-17 22:51:03 科技迭代

    int val; // 数据域,可以是任意类型


    ListNode* next; // 指针域,指向下一个节点


    ListNode(int x) : val(x), next(nullptr) {} // 构造函数,初始化数据域和指针域


在本文中,我们将介绍一个用C++编写的函数,用于从标准输入读取两个链表的数据,并返回一个包含两个链表头节点的向量。函数的参数和返回值都是vector类型,表示一个动态数组。vector是C++标准库中提供的一个容器,它可以存储任意类型的元素,并且可以根据需要自动调整大小。


函数的逻辑是先读取第一个链表的长度n1,然后用一个循环创建n1个节点,并将它们依次连接起来,形成第一个链表。然后将第一个链表的头节点放入向量中。接着读取第二个链表的长度n2,然后用另一个循环创建n2个节点,并将它们依次连接起来,形成第二个链表。然后将第二个链表的头节点放入向量中。最后返回向量,即包含两个链表头节点的数组。


函数的代码如下:


// 定义链表的节点类型


// 定义从标准输入读取两个链表的函数


    vector<ListNode*> res; // 定义一个向量,用于存储两个链表的头节点


    int n1, n2; // 定义两个变量,用于存储两个链表的长度


    cin >> n1; // 从标准输入读取第一个链表的长度


    if (n1 > 0) { // 如果第一个链表的长度大于0


        ListNode* head1 = new ListNode(0); // 创建一个哑节点,作为第一个链表的头节点


        ListNode* cur1 = head1; // 定义一个指针,指向当前节点


        for (int i = 0; i < n1; i++) { // 用一个循环创建n1个节点


            int x; // 定义一个变量,用于存储节点的数据


            cin >> x; // 从标准输入读取节点的数据


            ListNode* node = new ListNode(x); // 创建一个新节点,初始化数据域


            cur1->next = node; // 将当前节点的指针域指向新节点


            cur1 = node; // 将当前节点更新为新节点


        res.push_back(head1->next); // 将第一个链表的头节点(不包括哑节点)放入向量中


    cin >> n2; // 从标准输入读取第二个链表的长度


    if (n2 > 0) { // 如果第二个链表的长度大于0


        ListNode* head2 = new ListNode(0); // 创建一个哑节点,作为第二个链表的头节点


        ListNode* cur2 = head2; // 定义一个指针,指向当前节点


        for (int i = 0; i < n2; i++) { // 用一个循环创建n2个节点


            int x; // 定义一个变量,用于存储节点的数据


            cin >> x; // 从标准输入读取节点的数据


            ListNode* node = new ListNode(x); // 创建一个新节点,初始化数据域


            cur2->next = node; // 将当前节点的指针域指向新节点


            cur2 = node; // 将当前节点更新为新节点


        res.push_back(head2->next); // 将第二个链表的头节点(不包括哑节点)放入向量中


    return res; // 返回向量,即包含两个链表头节点的数组


函数的测试样例如下:


    vector<ListNode*> lists = readTwoLists(); // 调用函数,从标准输入读取两个链表


    for (ListNode* head : lists) { // 遍历向量中的每个链表头节点


        ListNode* cur = head; // 定义一个指针,指向当前节点


        while (cur) { // 当当前节点不为空时


            cout << cur->val << " "; // 输出当前节点的数据


            cur = cur->next; // 将当前节点更新为下一个节点


        cout << endl; // 输出换行符


    return 0; // 结束程序