C语言指针链表排序
时间: 2023-07-01 15:23:38 浏览: 131
实现 C 语言指针链表排序的一种常用方法是使用冒泡排序法。具体实现步骤如下:
1. 定义链表节点结构体,包含一个整数值和一个指向下一个节点的指针。
```
struct ListNode {
int val;
struct ListNode *next;
};
```
2. 定义一个函数,接收链表头节点的指针,并返回排好序的链表头节点的指针。
```
struct ListNode* sortList(struct ListNode* head) {
if (!head || !head->next) {
return head;
}
struct ListNode *p, *q, *end = NULL;
while (head != end) {
p = head;
q = head->next;
while (q != end) {
if (p->val > q->val) {
int tmp = p->val;
p->val = q->val;
q->val = tmp;
}
p = p->next;
q = q->next;
}
end = p;
}
return head;
}
```
在这个函数中,我们首先判断链表是否为空或只有一个节点,如果是,则直接返回原链表头节点的指针;否则,我们定义两个指针 p 和 q,分别指向头节点和头节点的下一个节点,然后进行冒泡排序,将最大的节点从头节点开始向后冒泡,直到链表尾部。排序结束后,我们将 end 指向最后一个已排序的节点,然后再次从头节点开始进行冒泡排序,直到 end 指向头节点为止。
3. 在主函数中创建一个链表,并调用 sortList 函数进行排序。
```
int main() {
struct ListNode n1 = {4, NULL};
struct ListNode n2 = {2, &n1};
struct ListNode n3 = {1, &n2};
struct ListNode n4 = {3, &n3};
struct ListNode *head = &n4;
struct ListNode *p = head;
while (p) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
head = sortList(head);
p = head;
while (p) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```
在这个例子中,我们创建了一个包含 4 个节点的链表,然后调用 sortList 函数进行排序,并打印出排序前后的链表节点值。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)