算法思想:使用双重for循环寻找最小值结点
void Del_All(LinkList &d){
printf("%p\n",d);
if(d==NULL)
return;
if(d->next==d){
free(d);
return;
}
LinkList pre;//指向最小值的前驱结点
LinkList min;//指向最小值结点
LinkList cur; //遍历的游标结点
while(d!=d->next){
pre=d;
min=d->next;
cur=min;
while(cur->next!=d){
if(min->data>cur->next->data){
pre=cur;
min=cur->next;
}
cur=cur->next;
}
printf("%d ",min->data);
pre->next=min->next; //进行解链
free(min); //释放内存
}
/**
free()释放的是指针指向的内存!注意!释放的是内存,
不是指针!指针并没有被释放,指针仍然指向原来的存储空间。
指针是一个变量,只有程序结束时才被销毁。
释放了内存空间后,原来指向这块空间的指针还是存在!
只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。
因此,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。
*/
free(d);
d=NULL;
}