【数据结构】(循环链表)反复找出单链表中的最小值并输出直到循环单链表为空 然后释放循环单链表的头结点

算法思想:使用双重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; 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值