您的位置:首页 > 编程语言 > C语言/C++

顺序合并两个非有序的链表(C++且不用链表实现)

2020-02-05 11:55 197 查看

题目要求:

给定由整数组成的两个无序数组,根据顺序合并成一个数组。

输入包括两行,每行由若干个由->分隔的整数组成,分别表示以最左整数为链表头,单向指向右侧节点的链表,每行输入均以 .结尾。

输出为合并后的单向链表,由->表示其间的指针,最终指向由NULL表示的空值。

在合并过程中,比较两个链表当前待合并的第一个元素,选择其中较小的那个元素放入合并后的数组。

输入格式
输入两行字符串,每行字符串由 有符号整数、->和.组成。

输出格式
输出一行字符串,表示合并后的数组。

样例输入复制
1->2->3.
1->0->2.
样例输出复制
1->1->0->2->2->3->NULL

程序代码:

#include <iostream>
using namespace std;
int main(){
int y=2,i,j,a[100],b[100],c[200];char str1,str2,str3,str4;
while(y--) //输入的样例
{
if(y==1)	//第一个样例输入
{
for( i=0;str1!='.';i++)//用a[100]数组存贮第一个样例的数字
{
cin>>a[i]>>str1;
if(str1=='.')
break;
else
cin>>str2;
}

}

else  //第二个样例输入
{
for( j=0;str3!= '.';j++)//用b[100]数组存贮第二个样例的数字
{
cin>>b[j]>>str3;
if(str3=='.')
break;
else
cin>>str4;
}
}
}
int n=0,m=0,k=0,flag1=0,flag2=0;
while(1)//循环比较a[100]和b[100]组数中相应次序的大小,最后用c[200]数组存贮
{

if(a[n]<=b[m]&&flag1==0)
{
c[k]=a[n];
n++;
k++;
if(n>i)
flag1=1;
}
else
{
if(flag2==0)
{
c[k]=b[m];
m++;
k++;
}

if(m>j)
flag2=1;
}
if(flag1==1&&flag2==1)
break;
}

for(int p=0;p<k;p++)//输出c[200]中的数字
{
if(p!=k-1)
cout<<c[p]<<"-"<<">";
else
cout<<c[p]<<"->NULL";
}

}

总结:本人是用C++写的不用链表代码,结果也正确,因本人编程习惯和水平的限制,不习惯用链表。不过网上也有用Java的String类来操作链表串也比较简单,发这个的目的是供C++不用链表写的作为参考。

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
GC. 发布了1 篇原创文章 · 获赞 1 · 访问量 20 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: