在单链表的模板中添加一个排序的函数
时间: 2024-02-29 13:52:13 浏览: 21
好的,下面是单链表模板中添加排序函数的示例代码:
```c++
#include <iostream>
using namespace std;
// 定义单链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(NULL) {}
};
// 定义单链表结构体
struct LinkedList {
ListNode* head;
LinkedList(): head(NULL) {}
// 向单链表中插入元素
void insert(int x) {
ListNode* node = new ListNode(x);
node->next = head;
head = node;
}
// 对单链表进行排序
void sort() {
if (head == NULL || head->next == NULL) {
return;
}
ListNode* cur = head->next;
head->next = NULL;
while (cur != NULL) {
ListNode* next = cur->next;
if (cur->val < head->val) {
cur->next = head;
head = cur;
} else {
ListNode* p = head;
while (p->next != NULL && p->next->val < cur->val) {
p = p->next;
}
cur->next = p->next;
p->next = cur;
}
cur = next;
}
}
// 打印单链表
void print() {
ListNode* cur = head;
while (cur != NULL) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
}
};
int main() {
LinkedList list;
list.insert(3);
list.insert(1);
list.insert(4);
list.insert(2);
list.insert(5);
cout << "排序前的单链表:" << endl;
list.print();
list.sort();
cout << "排序后的单链表:" << endl;
list.print();
return 0;
}
```
上述代码实现了对单链表的排序,具体的排序方法是插入排序。我们从单链表的第二个节点开始遍历,每次把当前节点插入到已排好序的链表中的合适位置。由于插入排序的时间复杂度为O(n^2),所以在实际使用中需要根据具体情况选择合适的排序算法。