📅  最后修改于: 2023-12-03 15:27:10.601000             🧑  作者: Mango
这是一个用于合并两个有序链表的 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++ 中常用的合并排序链表算法。