📌  相关文章
📜  用于合并排序的链表的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:27:10.601000             🧑  作者: Mango

用于合并排序的链表的 C++ 程序

这是一个用于合并两个有序链表的 C++ 程序。 在排序过程中,它将两个链表从头到尾逐个比较,选择较小的结点连接到排序后的链表中。

程序实现

以下是使用 C++ 编写的程序代码:

#include<iostream>
using namespace std;
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* head = new ListNode(0);
        ListNode* curr = head;
        while (l1 && l2) {
            if (l1->val <= l2->val) {
                curr->next = l1;
                l1 = l1->next;
            } else {
                curr->next = l2;
                l2 = l2->next;
            }
            curr = curr->next;
        }
        curr->next = l1 ? l1 : l2;
        return head->next;
    }
};
代码说明

该程序使用了链表数据结构。定义了结点类 ListNode,并在其中保存一个整数及指向下一个节点的指针。

程序使用了一个 Solution 类来定义 mergeTwoLists 函数,实现了合并两个有序链表的功能。该函数接收两个指向链表头部结点的指针作为参数。

程序创建了一个哨兵结点 head,作为新链表头的前驱结点。在遍历两个链表的过程中,程序通过比较两个链表当前结点中保存的值的大小,选择一个结点­作为排序后链表的下一个结点。程序在每次选择结点后更新 curr 指向 sorted 链表中的尾结点。

最后,当两个链表中至少有一个结点已被遍历完后,把合并后尾结点的 next 指向未被归并到排序结果中的剩余部分(即l1或l2)。最后返回新链表的头部结点。

总结

该程序实现了合并两个有序链表的功能。它使用链表结构,以及指向链表头结点的指针来遍历两个链表。

该程序在排序过程中,通过比较节点的值,选择较小的节点加入到排序后的链表中。 该程序以其简单明了的实现和高效的性能,成为 C++ 中常用的合并排序链表算法。