用C++代码实现单链表的排序与合并,并输出完整代码
时间: 2024-10-21 20:07:24 浏览: 27
C++实现单链表按k值重新排序的方法
在C++中,我们可以使用双向链表来实现链表的排序和合并操作,这里我将提供一个简单的示例,我们将演示如何对两个已排序的单向链表进行合并:
首先,我们需要创建链表节点结构体以及一些辅助函数,如比较函数、链表操作等。
```cpp
#include <iostream>
using namespace std;
// 链表节点
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 比较函数用于排序
bool compare(const ListNode* a, const ListNode* b) {
return a->val < b->val;
}
// 合并两个已排序链表
ListNode* mergeSortedLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
// 如果l1小于l2,则l1作为结果的第一个元素
if (compare(l1, l2)) {
l1->next = mergeSortedLists(l1->next, l2);
return l1;
} else {
l2->next = mergeSortedLists(l1, l2->next);
return l2;
}
}
// 打印链表
void printList(ListNode* head) {
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
// 创建两个已经排序的链表示例
ListNode* list1 = new ListNode(1);
list1->next = new ListNode(3);
list1->next->next = new ListNode(5);
ListNode* list2 = new ListNode(2);
list2->next = new ListNode(4);
list2->next->next = new ListNode(6);
// 对两个链表进行合并
ListNode* mergedList = mergeSortedLists(list1, list2);
// 打印合并后的链表
printList(mergedList);
// 清理内存
delete mergedList;
return 0;
}
```
阅读全文