c语言链表插入法解决以下问题?

根据问题的意思:

1.链表创建:根据输入的数字动态创建任意数量的节点插入链表。(题目规定n

2.链表排序:交换节点内容(不是地址)并保留链表指针的值(*next value)。

三、打印链表:使用链表指针遍历链表。

第四,释放动态应用的链表的地址空间(程序在这个程序中创建后就结束了,即使不写free release,完成后也会被释放。但是,在复杂程序中调用create时,后续是有代码的。您需要在我的代码中编写一个函数来释放未使用的内存,以避免浪费。

代码如下:

# include & ltstdio.h & gt

# include & ltmalloc.h & gt

typedef struct numStruct

{

int num

struct numStruct * next

} NST

NST * insert 2 list(int num);//根据编号创建节点(动态),插入链表(第一次自动生成头节点),成功返回头节点,失败返回NULL。

void showList(NST * NST head);//打印链表

void px(NST * NST head);//链表排序

void freeList(NST * NST head);//释放链表内存

int main()

{

NST * nsthead = NULL

int i=0,n=50,* nums = NULL

while(n & gt;40)

scanf("%d ",& ampn);

nums =(int *)malloc(sizeof(int)* n);

如果(!nums)返回1;

while(我& ltn)

scanf("%d ",& ampnums[i++]);

I = 0;

while(我& ltn)

NST head = insert 2 list(nums[i++]);

px(NST head);

showList(NST head);

freeList(NST head);

返回0;

}

void freeList(NST *nsthead)

{

NST *temp=NULL,* nst = NULL

if(nsthead)

{

NST = NST head-& gt;接下来;

while(nst!=空)

{

temp = nst

NST = NST-& gt;接下来;

免费(临时);

}

}

免费(NST head);

}

void显示列表(NST *nsthead)

{

if(nsthead)

while(NST head->;下一个!=空)

{

printf("%d ",NST head-& gt;下一个-& gt;num);

NST head = NST head-& gt;接下来;

}

printf(" \ n ");

}

void px(NST *nsthead)

{

NST *nt1=NULL,*nt2=NULL,ntTemp,* nextSave = NULL

if(nsthead)

{

nt 1 = NST head-& gt;接下来;

while(nt1)

{

nt2 = nt 1-& gt;接下来;

白色(nt2)

{

if(nt 1->;num & gtnt2->;数字)

{

nt temp = * nt 1;

next save = nt 1-& gt;接下来;

* nt 1 = * nt2;

nt 1->;next = nextSave

next save = nt2-& gt;接下来;

* nt2 = ntTemp

nt2->;next = nextSave

}

nt2 = nt2-& gt;接下来;

}

nt 1 = nt 1-& gt;接下来;

}

}

}

NST *insert2List(int num)

{

静态NST *nsthead=NULL,* nstTail = NULL

NST * nstNew = NULL

NST new =(NST *)malloc(sizeof(NST));

如果(!nstNew)返回NULL

NST new-& gt;next = NULL

NST new-& gt;num = num

如果(!nsthead)

{

NST head =(NST *)malloc(sizeof(NST));

如果(!nsthead)返回NULL

NST head->;next = nstNew

}

其他

NST tail->;next = nstNew

nstTail = nstNew

返回nsthead

}