有一个带头节点的单链表L(至少有一个数据节点),设计一个算法使其元素递增有序排序
时间: 2023-05-20 18:01:52 浏览: 84
lianbiao.zip_C 单链表 排序_递增式算法
可以使用插入排序的思路,从第二个节点开始遍历链表,将当前节点插入到已排序的链表中的正确位置。
具体实现步骤如下:
1. 定义一个指针p指向链表的第二个节点,一个指针q指向链表的第一个节点,一个指针r指向链表的头节点。
2. 遍历链表,对于每个节点p,从链表的头节点开始遍历,找到第一个比p节点大的节点q,将p节点插入到q节点之前。
3. 插入操作需要修改p节点的next指针和q节点的next指针,以及r节点的next指针(如果p节点插入到了头节点之前)。
4. 遍历完整个链表后,链表就变成了递增有序的。
代码实现如下:
void sortList(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return;
}
ListNode* p = head->next;
ListNode* q = head;
ListNode* r = new ListNode(0);
r->next = head;
while (p != nullptr) {
ListNode* prev = r;
ListNode* curr = r->next;
while (curr != p) {
if (curr->val > p->val) {
break;
}
prev = curr;
curr = curr->next;
}
if (curr != p) {
q->next = p->next;
prev->next = p;
p->next = curr;
p = q->next;
} else {
q = p;
p = p->next;
}
}
head = r->next;
delete r;
}
阅读全文