用C语言实现对单链表按优先级排序
时间: 2023-07-20 18:13:05 浏览: 148
在C语言中,我们可以使用插入排序(Insertion Sort)算法对单链表按优先级进行排序。具体步骤如下:
1. 创建一个新的空链表,作为排好序的链表。
2. 对原链表中的每个节点,依次将其插入到排好序的链表中,并保持链表的有序性。具体来说,我们可以从排好序的链表的头节点开始,一直遍历到尾节点,找到第一个大于等于该节点的位置,然后将该节点插入到该位置之前。
以下是使用C语言实现插入排序的代码:
```
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode* next;
};
struct ListNode* insert(struct ListNode* head, struct ListNode* node) {
if (head == NULL || node->val < head->val) {
node->next = head;
return node;
}
struct ListNode* p = head;
while (p->next != NULL && node->val >= p->next->val)
p = p->next;
node->next = p->next;
p->next = node;
return head;
}
struct ListNode* insertion_sort_list(struct ListNode* head) {
struct ListNode* new_head = NULL;
while (head != NULL) {
struct ListNode* node = head;
head = head->next;
new_head = insert(new_head, node);
}
return new_head;
}
int main() {
struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n2 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n3 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n4 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* n5 = (struct ListNode*)malloc(sizeof(struct ListNode));
n1->val = 4;
n2->val = 10;
n3->val = 3;
n4->val = 5;
n5->val = 1;
n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = NULL;
struct ListNode* new_head = insertion_sort_list(n1);
while (new_head != NULL) {
printf("%d ", new_head->val);
new_head = new_head->next;
}
return 0;
}
```
其中,我们通过定义一个链表节点结构体来表示单链表,使用insert()函数将一个节点插入到有序链表中,使用insertion_sort_list()函数对原链表进行排序,函数返回排序后的结果。
阅读全文