题目:给定一个带表头结点的单链表,设head为头指针,结点结构为(data,next),data为整型数据,next为指针,
试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间。(要求:不允许使用数组作为辅助空间)。
关键字:带头结点的单链表+按值的递增顺序操作(输出和删除)
思路
1.遍历链表,找出最小值元素,输出并释放其空间
需要变量:链表头结点head,遍历工作指针p,
(为实现释放功能)最小值结点的前驱结点指针pre
2.重复上述操作直至链表为空
3.释放头结点存储空间
void Min_Delete(LinkList &head){//head是带头结点的单链表的头指针,本算法按递增顺序输出单链表中的数据元素
while(head->next!=NULL){//循环到仅剩头结点
pre=head; //pre为元素最小值结点的前驱结点的指针
p=pre->next; //p为工作指针
while(p->next!=NULL){
if(p->next->data<pre->next->data)
pre=p; //记住当前最小值结点的前驱
p=p->next; //p继续遍历
}
print(pre->next->data);//输出元素最小值结点的数据
u=pre->next;//准备删除元素值最小的结点,释放结点空间
pre->next=u->next;
free(u);
}
free(head);//释放头结点
}