越级错误集合,0分

 题目:给定一个带表头结点的单链表,设head 为头指针,结点结构为(data,next) ,data为整型元素,next 为指针,试写出算法:按递增次序输出单表中各结点的数据元素,并释放结点所占的存储空间( 要求: 不允许使用数组作为辅助空间)

思路:每次寻找链表里的最小值,然后输出后删除即可。

代码:

//递增输出结点元素,并释放空间
void sortlistandfree(LinkList &L){
	//初始化前驱节点 暂存节点 工作节点 
	LNode *pre,*r,*p;
	//遍历L 
	while(L){
		//保存前驱为头节点 
		pre = L;
		//p指向第一个元素 
		p = pre->next;
		//对第一个元素向后遍历 
		while(p->next){
			//如果找到最小值,更新前驱 
			if(p->next->data < pre->next->data)pre=p;
			//p后移 
			p = p->next;
		}
		//打印该删除的节点 
		printf("%d",pre->next->data);
		//r暂存删除节点 
		r = pre->next;
		//前驱next后移 
		pre->next = r->next;
		//释放节点 
		free(r);
	} 
	//释放头节点 
	free(L);
} 

 题目:在一个递增有序的线性表中, 有数值相同的元素存在·。若存储方式为单链表,设计算法去掉数值相同的元素, 使表中不再有重复的元素, 例如( 7 , 10 , 10 , 21 , 30 , 42 , 42,42 , 51 , 70 ) ,将变为( 7 , 10 , 21 , 30 , 42 ,51,70)。

思路:快慢指针操作,类似顺序表里的替换,只不过这里的节点要保存释放。

代码:

//去除相同元素,快慢指针问题
void removesamenode(LinkList &L){
	//初始化节点 a指向第一个元素 b指向第二个元素 r暂存 pre保存前驱 
	LNode *a = L->next,*b = a->next,*r,*pre;
    //遍历开始 
	while(a && b){
		//如果元素不相等 
		if(a->data!=b->data){
			//保存慢节点指针 
			pre = a;
			//a前移 
			a = a->next;
			//b前移 
			b = b->next;
		}else{
			//r暂存a 
			r = a;
			//a前移 
			a=a->next;
			//前驱更新 
			pre->next = a;
			//释放r 
			free(r);
			//b前移 
			b = b->next;
		}
	}
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值