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

题目要求:

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

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

输出为合并后的单向链表,由->表示其间的指针,最终指向由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++不用链表写的作为参考。

猜你喜欢

转载自blog.csdn.net/weixin_43595755/article/details/103273461