单链表{21,23,14,5,56,17,31}实现将单链表递增排序用c++怎么做
时间: 2024-11-24 15:42:12 浏览: 4
在 C++ 中,你可以通过创建一个自定义的链表节点结构体,并使用迭代的方式来对给定的单链表进行递增排序。这里是一个简单的示例:
```cpp
#include <iostream>
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 用于递增排序的辅助函数
ListNode* sortList(ListNode* head) {
if (!head || !head->next) { // 如果链表为空或只有一个元素,直接返回
return head;
}
// 分割链表成两半
ListNode* slow = head;
ListNode* fast = head->next;
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
ListNode* mid = slow->next;
slow->next = nullptr; // 断开后半部分
// 对前半部分和后半部分分别递归排序
ListNode* left = sortList(head);
ListNode* right = sortList(mid);
// 合并已排序的部分
ListNode dummy(0); // 创建虚拟头结点
ListNode* tail = &dummy;
while (left && right) {
if (left->val < right->val) {
tail->next = left;
left = left->next;
} else {
tail->next = right;
right = right->next;
}
tail = tail->next;
}
if (left) {
tail->next = left;
} else {
tail->next = right;
}
return dummy.next; // 返回排序后的链表头结点
}
// 测试函数
void printList(ListNode* head) {
while (head) {
std::cout << head->val << " -> ";
head = head->next;
}
std::cout << "nullptr" << std::endl;
}
int main() {
ListNode* list = new ListNode{21};
list->next = new ListNode{23};
list->next->next = new ListNode{14};
list->next->next->next = new ListNode{5};
list->next->next->next->next = new ListNode{56};
list->next->next->next->next->next = new ListNode{17};
list->next->next->next->next->next->next = new ListNode{31};
printList(list); // 打印原始链表
list = sortList(list);
printList(list); // 打印排序后的链表
return 0;
}
```
在这个例子中,我们首先定义了一个链表结构体 `ListNode`,然后实现了一个 `sortList` 函数来递归地分割链表并合并已排序的部分。最后在 `main` 函数里创建了链表并打印排序前后的情况。
阅读全文