删除2个非递增链表相同的元素,并且合并为一个非递增链表
来源:互联网 发布:rax户外鞋怎么样知乎 编辑:程序博客网 时间:2024/04/29 04:51
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
linklist fun(linklist ha,linklist hb)
{ linklist pa,pb,u,r; //ha,hb分别是带头结点的两个单链表的头指针,链表中的元素值按非递减有序,本算法将两链表合并成一个按元素值非递增有序的单链表,并删除重复元素
pa=ha->next; //pa是链表ha的工作指针
pb=hb->next; //pb是链表hb的工作指针
ha->next=NULL; //ha作结果链表的头指针,先将结果链表初始化为空
while(pa!=NULL && pb!=NULL) //当两链表均不为空时作
{ while(pa->next && pa->data==pa->next->data)
{u=pa->next; pa->next=u->next; free(u);}//删除pa链表中的重复元素
while(pb->next && pb->data==pb->next->data)
{u=pb->next; pb->next=u->next; free(u);}//删除pb链表中的重复元素
if(pa->data<pb->data)
{r=pa->next; //将pa 的后继结点暂存于r
pa->next=ha->next; //将pa结点链于结果表中,同时逆置
ha->next=pa;
pa=r; //恢复pa为当前待比较结点
}
else if(pb->data<pa->data)
{r=pb->next; // 将pb 的后继结点暂存于r
pb->next=ha->next; //将pb结点链于结果表中,同时逆置
ha->next=pb;
pb=r; //恢复pb为当前待比较结点
}
else{u=pb;pb=pb->next;free(u);}//删除链表pb和pa中的重复元素
} // while(pa!=null && pb!=null)
if(pa) pb=pa; //避免再对pa写下面的while语句
while(pb) //将尚未到尾的表逆置到结果表中,注意也要删除重复元素
{
while(pb->next && pb->data==pb->next->data)
{u=pb->next;
pb->next=u->next;
free(u);
}//∥删除链表中的重复元素
r=pb->next;
pb->next=ha->next;
ha->next=pb;
pb=r;
}
return ha;
} //∥算法Union结束
void main()
{linklist h,h1,h3;
initlist(h);
initlist(h1);
listinsert(h);
listinsert(h1);
h3=fun(h,h1);
if(h!=NULL)
{
printf_list(h3);
//释放
}
}
- 删除2个非递增链表相同的元素,并且合并为一个非递增链表
- 将两个非递减的有序链表合并为一个非递增的有序链表
- 合并两个递增链表为一个递增链表
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个递增的有序链表合并为一个递增的有序链表
- 将两个递增的链表合并成一个递减的链表(相同的元素只留下一个),并要求利用原表结点
- 两个递增有序链表合并为一个链表
- 数据结构之将两个递增的有序链表合并为一个递增的有序链表
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 线性链表之将单调递增的la和lb中的数据元素按值递增,将la和lb合并为新的线性表lc,使lc中的元素仍然单调递增
- 编写算法,对非递减顺序存储的线性表操作,将表中相等的多余元素删除,变为严格递增
- 合并两个递增排序的链表
- 《数据结构》2.1递增链表的合并
- 合并两个递增的链表
- 合并两个递增的链表
- 合并两递增链表
- 合并两个递增链表
- The list of Vim commands
- Linux输入子系统分析(一)
- qsort详细实现, 双向冒泡
- Yum安装PostgreSQL
- NSIS安装包提前释放一些文件
- 删除2个非递增链表相同的元素,并且合并为一个非递增链表
- 今天又去面试了,面试了将近四个小时
- 汉诺
- 复习笔记3 算数运算符 转义字符 转义序列 前后自增自减的区别
- linux rpm软件包管理器
- c++程序员面试题目
- ios url缓存策略——NSURLCache、 NSURLRequest
- 规范编程
- Tomcat源码12之AccessLogValve类