C++ 合并两个无序单链表 - 代码示例

本文介绍了如何使用 C++ 代码将两个无序单链表合并成一个新的单链表,并提供了一个完整的代码示例,帮助您理解实现过程。

代码示例:

#include <iostream>

using namespace std;

// 定义单链表的结构体
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        // 如果其中一个链表为空,则直接返回另一个链表
        if (!l1) {
            return l2;
        }
        if (!l2) {
            return l1;
        }

        // 定义一个哨兵节点,方便操作
        ListNode* dummy = new ListNode(-1);
        ListNode* cur = dummy;

        while (l1 && l2) {
            if (l1->val < l2->val) {
                cur->next = l1;
                l1 = l1->next;
            } else {
                cur->next = l2;
                l2 = l2->next;
            }
            cur = cur->next;
        }

        // 将剩余的节点接到新链表的末尾
        if (l1) {
            cur->next = l1;
        }
        if (l2) {
            cur->next = l2;
        }

        return dummy->next;
    }
};

int main() {
    // 创建两个链表
    ListNode* l1 = new ListNode(1);
    l1->next = new ListNode(3);
    l1->next->next = new ListNode(5);

    ListNode* l2 = new ListNode(2);
    l2->next = new ListNode(4);
    l2->next->next = new ListNode(6);

    // 合并两个链表
    Solution solution;
    ListNode* mergedList = solution.mergeTwoLists(l1, l2);

    // 输出合并后的链表
    while (mergedList) {
        cout << mergedList->val << ' ';
        mergedList = mergedList->next;
    }
    cout << endl;

    return 0;
}

输出结果:

1 2 3 4 5 6

代码解析:

  1. 定义单链表结构体: ListNode 结构体包含两个成员变量: val 表示节点的值, next 指向下一个节点。
  2. 创建哨兵节点: dummy 节点是一个虚拟节点,方便操作合并后的链表。
  3. 循环遍历: 循环遍历两个链表,将值较小的节点添加到合并后的链表中。
  4. 处理剩余节点: 循环结束后,将剩余节点添加到合并后的链表末尾。
  5. 返回结果: 返回合并后的链表的头节点。

总结:

本示例代码展示了如何使用 C++ 代码合并两个无序单链表。通过循环遍历两个链表,比较节点的值,并将较小的节点添加到合并后的链表中,最终得到一个包含所有节点的新的单链表。

C++ 合并两个无序单链表 - 代码示例

原文地址: http://www.cveoy.top/t/topic/oawO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录