C语言实现带头结点的单链表的结点值按升序排列
时间: 2024-05-11 12:14:31 浏览: 11
以下是C语言实现带头结点的单链表的结点值按升序排列的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkedList;
LinkedList createLinkedList(int n);
void sortLinkedList(LinkedList head);
void printLinkedList(LinkedList head);
int main() {
int n;
printf("Enter the number of nodes: ");
scanf("%d", &n);
LinkedList head = createLinkedList(n);
printf("Original linked list: ");
printLinkedList(head);
sortLinkedList(head);
printf("Sorted linked list: ");
printLinkedList(head);
return 0;
}
LinkedList createLinkedList(int n) {
LinkedList head = (LinkedList) malloc(sizeof(Node));
head->next = NULL;
LinkedList tail = head;
for (int i = 0; i < n; i++) {
int data;
printf("Enter the value of node %d: ", i + 1);
scanf("%d", &data);
LinkedList new_node = (LinkedList) malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
tail->next = new_node;
tail = new_node;
}
return head;
}
void sortLinkedList(LinkedList head) {
if (head->next == NULL || head->next->next == NULL) {
return;
}
LinkedList p = head->next;
head->next = NULL;
while (p != NULL) {
LinkedList q = p->next;
LinkedList prev = head;
while (prev->next != NULL && prev->next->data < p->data) {
prev = prev->next;
}
p->next = prev->next;
prev->next = p;
p = q;
}
}
void printLinkedList(LinkedList head) {
LinkedList p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
```
该代码首先定义了一个`Node`结构体,包含了一个整数数据域和一个指向下一个结点的指针。然后定义了一个`LinkedList`类型,为指向结点的指针。接着定义了三个函数:`createLinkedList`用于创建一个带头结点的单链表,`sortLinkedList`用于将单链表中的结点值按升序排列,`printLinkedList`用于打印单链表中的所有结点的值。
在`main`函数中,首先让用户输入需要创建的单链表的结点个数`n`,然后调用`createLinkedList`函数创建一个带头结点的单链表。接着打印原始单链表,调用`sortLinkedList`函数将单链表中的结点值按升序排列,再次打印排好序后的单链表。最后返回0表示程序正常结束。