我是用双指针的写法来写的,想知道下面的代码怎么处理一个链表是空另一个不是空的情况?谢谢!
样例
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;
}
}
}
#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;
}
开本网页下面的相关推荐