9.给定一个带表头节点的单链表,
设head为头指针,节点结构为(data, next),data为整型元素,next为指针,
试写出算法:按递增次序输出单链表中各节点的数据元素,并释放节点所占的存储空间。
(要求:不允许使用数组作为辅助空间)
/*
按递增次序输出单链表各节点的数据元素,并释放节点所占的存储空间。
分析:
我们可以先进行,然后依次输出,并释放节点空间,
我们也可以直接进行遍历,找到目前最小值,进行输出,然后释放,注意不要断链
我们这里采用第二种方法*
*/
#include<stdio.h>
#include<stdlib.h>
#include”linkStruct.h“//通过自创建文件引入结构体,ctrl+鼠标左键点击即可查看
void printfAndDel(Link *h){
Link *pre=h, *p=h->next,*r,*min=h->next,*minPre=h;
//为了操作的顺利进行,我们需要时刻保存节点的前驱和后继
p=h->next;
printf("输出顺序为:\n");
while(h->next){
if(p->data<min->data){
minPre=pre;
min=p;
}
pre=p;
p=p->next;
}
printf("%d ",min->data);
//r=min->next;
minPre->next=min->next;
free(min);
pre=minPre=h;
p=min=h->next;
}
printf("\n");
}
int main(){
Link *head;
Link *createLink(int);
void printfNowLink(Link*);
head=createLink(0);
printAndDel(head);
printfNowLink(head);
rerturn 0;
}