链表排序举个实际例子用冒泡排序不包含头结点
时间: 2023-08-03 22:18:11 浏览: 67
冒泡排序实例
好的,我们可以举一个链表排序的实际例子,该链表包含多个节点,每个节点有一个整数值。我们使用冒泡排序对该链表进行排序,具体步骤如下:
1. 定义两个指针,分别称为 "当前节点" 和 "前驱节点",并初始化为链表的头结点和 NULL。
2. 在一个 while 循环中,外层循环从头结点开始,内层循环从当前节点的下一个节点开始,依次比较相邻两个节点的值大小,并交换它们的位置,直到内层循环结束。
3. 每次内层循环结束后,当前节点指针指向下一个节点,前驱节点指针指向当前节点,直到当前节点指针指向 NULL,表示已经遍历完整个链表。
4. 最后得到的链表即为排序后的链表。
下面是具体的代码实现:
```c++
// 定义链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 冒泡排序
ListNode* bubbleSortList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
ListNode *cur = head, *pre = NULL;
while (cur != NULL) {
ListNode *p = head;
ListNode *q = p->next;
while (q != NULL) {
if (p->val > q->val) {
ListNode *temp = p;
p = q;
q = temp;
if (pre != NULL) {
pre->next = p;
} else {
head = p;
}
temp = p->next;
p->next = q->next;
q->next = temp;
}
pre = p;
p = p->next;
q = q->next;
}
cur = cur->next;
}
return head;
}
```
需要注意的是,在实现过程中需要注意边界条件,以及交换节点时需要注意保留前驱节点的指针。此外,该实现并不包含头结点,即头结点不参与排序。
阅读全文