两个有序链表序列的合并遇到的问题

我是用双指针的写法来写的,想知道下面的代码怎么处理一个链表是空另一个不是空的情况?谢谢!

样例

img


我的代码

List Merge( List L1, List L2 ){
    List s1,s2,p1,p2,j,tail;//s1,p1,s1在p1前一位,是指向L1的两个指针。s2,p2同理
    j=(struct Node *)malloc(sizeof(struct Node));//创建一个新链表j储存合并后的链表,tail始终指向j链表尾部;
    j->Next=NULL;
    tail=j;
    p1=L1->Next;
    p2=L2->Next;
    L1->Next=NULL;
    L2->Next=NULL;
    s1=p1;
    s2=p2;
    p1=p1->Next;
    p2=p2->Next;
    while(s1!=NULL||s2!=NULL){
        if(s1->Next==NULL&&s2->Data>=s1->Data){//当L1链表先到最后一项
           tail->Next=s1;
           tail=tail->Next;
           tail->Next=s2;
           return j;
       }else if(s2->Next==NULL&&s1->Data>=s2->Data){//当L2链表先到最后一项
           tail->Next=s2;
           tail=tail->Next;
           tail->Next=s1;
             return j;
     }
     if(s1->Data<s2->Data){//通过比较s1,s2中的值来接入j链表
            tail->Next=s1;
            tail=tail->Next;
            s1=p1;        //s1,p1各向后移一位;
            p1=p1->Next;//
     }else{
            tail->Next=s2;
            tail=tail->Next;
            s2=p2;
            p2=p2->Next;
        }   
    } 
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7612928
  • 这篇博客也不错, 你可以看下将两个链表表示的递增整数序列合并为一个非递减的整数序列。
  • 除此之外, 这篇博客: 数据结构——线性表的顺序存储结构简单输出代码中的 在定义一个线性表的顺序存储类型时,需要定义一个数组来存储线线表中的所有元素和定义一个整型变量来存储线性表的长度。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    #include<stdlib.h>								//头文件 
    #define MaxSize 60								//线性表存储空间的大小 
    typedef char ElemType;							//自定义类型语句 
    typedef struct{									//线性表的顺序存储表示 
    	ElemType data[MaxSize];						//存储线性中的元素 
    	int length;									//存放线性表的长度 
    }SqList;										//线性表顺序存储结构类型名 
    void CreatList_Sq(SqList *&L,ElemType a[],int n)
    {
    	int i;
    	L=(SqList *)malloc(sizeof(SqList));			//分配存放线性的空间 
    	for(i=0;i<n;i++)
    		L->data[i]=a[i];
    	L->length=n;								//令线性表L的长度为n 
    } 
    /*bool ListEmpty(SqList *L)						//判断是否为空表 
    {
        return(L->length==0);
    }*/
    void DispList(SqList *L)						//输出线性表 
    { int i;
        /*if (ListEmpty(L)) 
    	return;*/ 
        for (i=0;i<L->length;i++)
            printf("%d",L->data[i]);
        printf("\n");
     } 
    int main()
    {
    	SqList *L;
    	ElemType a[]={1,2,3,4,5,6,7,8};
    	CreatList_Sq(L,a,8);
    	printf("L:");
    	DispList(L); 
    	return 0;
    } 


     

  • 您还可以看一下 张传波老师的软件设计是怎样炼成的?课程中的 架构设计的第一层拆解小节, 巩固相关知识点

开本网页下面的相关推荐