输入的单链表排序成为有序单链表的操作函数定义
时间: 2024-12-19 11:17:28 浏览: 4
在操作单链表并将其排序成有序链表的过程中,我们通常会定义一个递归或迭代的函数,比如在C++中,你可以使用快速排序或插入排序的思想。这里是一个简单的示例,假设我们有一个包含整数节点的链表:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 使用迭代法对链表进行排序
ListNode* sortList(ListNode* head) {
if (!head || !head->next) { // 如果链表为空或只有一个元素,它已经是有序的
return head;
}
ListNode *slow = head, *fast = head->next; // 定义快慢指针
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
ListNode *newEnd = slow->next; // 将慢指针移到末尾
slow->next = NULL; // 分割链表
ListNode *left = sortList(head); // 对左半部分排序
ListNode *right = sortList(newEnd); // 对右半部分排序
return merge(left, right); // 合并两个已排序的子链表
}
ListNode* merge(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
if (l1->val < l2->val) {
l1->next = merge(l1->next, l2);
return l1;
} else {
l2->next = merge(l1, l2->next);
return l2;
}
}
```
这个`sortList`函数首先将链表分为两半,然后分别对这两半进行递归排序,最后通过`merge`函数合并两个有序的部分。
阅读全文