c语言合并两个单链表LA和LB,把两个递增的单链表La,Lb,合并成一个递减的单链表Lc...
原文题是严蔚敏同志的数据结构习题中第二章线性表中提出的问题。
原问如下:
2.24 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表与B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元表)排列的线性表C,并要求利用原表(即A表与B表)的结点空间构造C表。
分析:对两个或两个以上,结点按元素值递增/减排列的单链表进行操作时,应采用"指针平行移动、一次扫描完成"的策略。且链表A与链表B的长度大小不一定相等。
代码:
#include
using namespace std;
typedef int ElemType;
//两个递增的链表合并成递增的链表。
typedef struct LNode
{
ElemType data;
struct LNode *next;
}
LNode;
typedef LNode *LinkList;
void CreatList(LinkList &L,int n)
{
LinkList p,q;
L=new LNode;
L->next=NULL;
q=L;
cout<
for (int i=1;i<=n;i++)
{
p=new LNode;
cin>>p->data;
p->next=q->next;
q->next=p;
q=q->next;
}
cout<
p=L->next;
for (int j=1;j<=n;j++)
{
cout<data<
p=p->next;
}
cout<
}
void CreatC(LinkList &A,LinkList &B,LinkList &C,int n)
{
LinkList pa,pb,pc,pre=NULL/*C结点的上一个结点*/,q/*t*/;
pa=A->next;
pb=B->next;
// C=t=A;// A
while (pa||pb)
{
if (!pb||((pa&&pb)&&(pa->datadata)))
{
将A的元素插入新表
pc=pa;
q=pa->next;
pa->next=pre;
pa=q;
}
else
{
pc=pb;
q=pb->next;
pb->next=pre;
pb=q; //将B的元素插入新表
}
pre=pc;
}
cout<
C=A;
A->next=pc;
pa=pc;
for (int j=1;j<=n;j++)
{
cout<data<
pa=pa->next;
}
cout<
getchar();
}
void main()
{
LinkList A,B,C;
int n,m,k;
cout<
cin>>n;
CreatList(A,n);
cout<
cin>>m;
CreatList(B,m);
k=m+n;
CreatC(A,B,C,k);
system(0);
getchar();
}
运行结果:
c语言合并两个单链表LA和LB,把两个递增的单链表La,Lb,合并成一个递减的单链表Lc...相关推荐
- 链表归并成递减c语言,将两个递增的单链表合并为一个递减的单链表
问题描述: 假设有两个按元素值递增次序排列的线性表,均以单链表形式存储.请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表. 问题解答: ...
- 两个非递减有序单链表La和Lb合并成一个非递增有序链表Lc
#include<iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> ...
- 两个有序链表合并成一个有序的单链表
将这两个有序链表合并成一个有序的单链表 要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间 表中允许有重复数据 算法描述 (1)定义一个合并后的指针pc指向La表的头结点.由于要求不占 ...
- 多项式合并同类项c语言链表,链表透过文件读写计算两个多项式之积
当前位置:我的异常网» C语言 » 链表透过文件读写计算两个多项式之积 链表透过文件读写计算两个多项式之积 www.myexceptions.net 网友分享于:2014-03-24 浏览:10次 ...
- c语言两个线性表la lb,假设有两个集合A和B分别用两个线性表LA和LB表示,即.ppt
假设有两个集合A和B分别用两个线性表LA和LB表示,即.ppt 循环链表是单链表的变形. 循环链表最后一个结点的link指针不为 0 (NULL),而是指向了表的前端. 为简化操作,在循环链表中往往加 ...
- 判断单链表是否存在环以及两个链表是否相交
有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环.如下图: 图1 有环的链表 问题:如何判断一个链表是不是这类链表?如果链表为存在环,如何 ...
- c语言两个线性表la lb,有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合...
<有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合>由会员分享,可在线阅读,更多相关<有两个集合用两个线性表LA和LB表示即线性表中的数据元 ...
- 翻转链表python递归_Python LeetCode-206.反转链表(难度-简单) 两个方法-迭代和递归,以及超简写法(python)...
1.题目描述 反转一个单链表. 实例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: ...
- java中获取链表的第一个节点,两个链表中的第一个公共节点(java)
题目描述: 输入两个链表,找出它们的第一个公共结点. 分析: 思路一:暴力解法,强烈不建议! 遍历第一个链表的每个节点,同时每次都遍历一遍另一个链表,看是否有节点和这个节点相同,如果有相同节点就是公共 ...
最新文章
- 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程
- 批量更改Windows操作系统文件名
- Mac 环境变量配置
- C语言中的深拷贝和浅拷贝
- 某教授对“中国式科研”的酒后真言
- Kafka 源码分析之网络层(二)
- Linux操作系统的8个经典技巧
- Java实战之管家婆记账系统(16)——条形图展示数据界面及功能实现
- java 获取yyyymmdd_从JS日期对象获取YYYYMMDD格式的字符串?
- 如何用ps修改图片的大小不变形
- 【毕业设计】基于单片机的智能饮水控制系统 - 物联网 嵌入式 stm32 c51
- Your cache folder contains root-owned files, due to a bug in npm ERR! previous versions of npm which
- EasyDarwin开源流媒体服务器
- mark:Kafka
- 禅道——图文安装及使用教程
- window10 彻底关闭自动更新
- 晶振01——晶振分类和无源晶振的设计
- kafka 消费者组
- 职场12年模拟沙盘心得及回顾
- 数学科学的完整课程大纲(工科自学必看)