考研数据结构day17-day22

数据结构考研习题解析:链表操作与序列比较
本文介绍了多个数据结构考研题目,涉及链表操作,包括删除线性表中相同元素、两个递增链表的归并、求两链表的公共元素、交集以及判断循环双链表对称性。每个题目都有详细的分析和解题思路。

day17
在一个递增有序的线性表中,有数值相同的元素存在,若存储方式为单链表,设计算法去掉数值相同的元素,使得表中不再存在相同的元素。这里举例{7,10,10,21,30,42,42,42,51,70}变化为{7,10,21,30,42,51,70}

1、题目分析:

要删除相同数值的元素的步骤一般为:
先查找相同的元素
然后删除
首先是要查找相同元素的方法,则是需要通过指针进行,对于指针的数量应该是2个,一个pre作为前驱,一个操作指针p,其实现图如在这里插入图片描述

//完整代码
void Delete_samenum(Linklist&L){
   
   
	LNode*pre=L->next;
	LNode*p=pre->next;
//核心代码
while(p!=NULL){
   
   
	if(pre->data==p->data){
   
   //找到相同元素
		//执行删除操作
		pre->next=p->next;
		free(p);//释放内存
		//重新定义p
			p=pre->next;
			}else{
   
   //若不相等
			pre=p;//先操作pre,pre后移 p再后移
			p=p->next;
			
		}
	}
}

day 18
假设有两个按元素值递增次序排列的线性表,均以单链表的形式存储,请编写算法,将两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来的两个单链表的节点存放归并后的单链表。

题目分析:
1、两个递增的单链表->>>>>递减的单链表(头插法)
2、同时由于利用原来的两个单链表的节点存放归并后的单链表表示不可以再开辟新空间
其实现的思路图如下:
在这里插入图片描述

Linklist Merge_list(Linklist&A,Listlink &B)
	LNode*p=A->next;
	LNode*q=B->next;
	LNode*r;//保存后继
A->next=null;//头插法设计的第一步需要对其进行初始化
//A链表作为初始化的合并链表
while(p!=NULL&&q!=NULL){
   
   
	if(p->data<q->data){
   
   
	//p小于q,对A进行头插法
		r=p->next;//防止断链
		p->next=A->next<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值