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<
数据结构考研习题解析:链表操作与序列比较

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

被折叠的 条评论
为什么被折叠?



