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
}