2022.10.02,有帮助可以一键三连,动作虽小,但是为博主的创作动力。
任务描述
本关任务:有一个带头结点的单链表L(至少有一个数据结点),设计一个算法使其元素递增有序排列。
编程要求
根据提示,在右侧编辑器补充代码,完成函数void sort_list(LinkNode *&L),该函数功能是对带头结点的单链表L进行插入排序,使其递增有序。
各种格式
输入格式
输入包括两行。
第一行为一个整数n。
第二行为空格隔开的n个整数。
输出格式
输出包括两行。
第一行为排序之前的单链表。每个数据后一个空格。
第二行为递增排序之后的单链表。每个数据后一个空格。
样例输入
10
1 3 2 9 0 4 7 6 5 8
样例输出
L: 1 3 2 9 0 4 7 6 5 8
L: 0 1 2 3 4 5 6 7 8 9
开始你的任务吧,祝你成功!
C++代码
#include "linklist.h"
/**
* 单链表L递增(插入)排序
*/
void sort_list(LinkNode *&L)
{
//请在下面编写代码
/******************Begin******************/
LinkNode *p,*pre,*r;
p = L->next->next;
L->next->next = NULL;
while(p != NULL){
r = p->next;
pre = L;
while(pre->next !=NULL && p->data > pre->next->data)
pre = pre->next;
p->next = pre->next;
pre->next = p;
p = r;
}
/*******************End*******************/
}
int main()
{
LinkNode *L;
// int n = 10;
// ElemType a[] = {1, 3, 2, 9, 0, 4, 7, 6, 5, 8};
int n;
scanf("%d", &n);
int *a = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
CreateListR(L, a, n); //创建单链表
printf("L: "); DispList(L); //输出单链表
sort_list(L); //单链表递增排序
printf("L: "); DispList(L); //输出排序后的单链表
DestroyList(L); //销毁单链表
free(a); //释放数组
return 0;
}