用C语言写出带表头结点单链表的逆置和排序运算的代码
时间: 2023-06-09 18:08:29 浏览: 80
好的,以下是用C语言实现带表头结点单链表的逆置和排序运算的代码:
```
#include <stdio.h>
#include <stdlib.h>
/* 定义链表节点结构体 */
typedef struct Node
{
int data; // 数据域
struct Node *next; // 指针域
} Node;
/* 创建带表头结点的单链表 */
Node *createLinkedList(int n)
{
Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;
Node *p = head;
int i;
for (i = 0; i < n; i++)
{
Node *node = (Node *)malloc(sizeof(Node));
printf("请输入第%d个节点的数据:", i + 1);
scanf("%d", &node->data);
node->next = NULL;
p->next = node;
p = node;
}
return head;
}
/* 输出单链表 */
void printLinkedList(Node *head)
{
Node *p = head->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
/* 单链表逆置 */
void reverseLinkedList(Node *head)
{
Node *p = head->next;
head->next = NULL;
while (p != NULL)
{
Node *tmp = p;
p = p->next;
tmp->next = head->next;
head->next = tmp;
}
}
/* 单链表排序 */
void sortLinkedList(Node *head)
{
Node *p, *q;
int tmp;
for (p = head->next; p != NULL; p = p->next)
{
for (q = p->next; q != NULL; q = q->next)
{
if (p->data > q->data)
{
tmp = p->data;
p->data = q->data;
q->data = tmp;
}
}
}
}
int main()
{
int n;
printf("请输入链表长度:");
scanf("%d", &n);
Node *head = createLinkedList(n);
printf("原始链表:");
printLinkedList(head);
reverseLinkedList(head);
printf("逆置后的链表:");
printLinkedList(head);
sortLinkedList(head);
printf("排序后的链表:");
printLinkedList(head);
return 0;
}
```
以上代码实现了带表头结点单链表的逆置和排序运算。输入链表长度和各个节点的数据,然后输出原始链表、逆置后的链表和排序后的链表。