[求助]链表合并输出不对
代码如下,求大神指教:#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
typedef int Status;
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList *L)
{ // 算法2.3
// 构造一个空的线性表L。
L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!L->elem) return ERROR; // 存储分配失败
L->length = 0; // 空表长度为0
L->listsize = LIST_INIT_SIZE; // 初始存储容量
return OK;
} // InitList_Sq
Status ListInsert_Sq(SqList *L, int i, ElemType e)
{ // 算法2.4
// 在顺序线性表L的第i个元素之前插入新的元素e,
// i的合法值为1≤i≤ListLength_Sq(L)+1
ElemType *p;
if (i < 1 || i > L->length+1) return ERROR; // i值不合法
if (L->length >= L->listsize) { // 当前存储空间已满,增加容量
ElemType *newbase = (ElemType *)realloc(L->elem,
(L->listsize+LISTINCREMENT)*sizeof (ElemType));
if (!newbase) return ERROR; // 存储分配失败
L->elem = newbase; // 新基址
L->listsize += LISTINCREMENT; // 增加存储容量
}
ElemType *q = &(L->elem[i-1]); // q为插入位置
for (p = &(L->elem[L->length-1]); p>=q; --p) *(p+1) = *p;
// 插入位置及之后的元素右移
*q = e; // 插入e
++L->length; // 表长增1
return OK;
}
Status mergelistsq(SqList *la,SqList *lb,SqList *lc)
{
ElemType *pa,*pb,*pc,*palast,*pblast;
pa=la->elem;
pb=lb->elem;
lc->listsize=lc->length=la->length+lb->length;
pc=lc->elem=(ElemType *)malloc(lc->listsize*sizeof(ElemType));
if(!lc->elem) return ERROR;
palast=la->length+la->elem-1;
pblast=lb->length+lb->elem-1;
while(pa<=palast&&pb<=pblast)
{
if(*pa<=*pb)
*pc++=*pa++;
else
*pc++=*pb++;
}
while(pa<=palast)
{
*pc++=*pa++;
}
while(pb<=pblast)
{
*pc++=*pb++;
}
return OK;
}
void loadsq(SqList *l)
{
int i;
if(l->length==0) exit(1);
for(i=0;i<l->length;i++)
printf("%d ",l->elem[i]);
}
int main()
{
int i,e,j=1;
SqList la,lb,lc;
scanf("%d",&i);
while(i>0)
{
scanf("%d",&e);
ListInsert_Sq(&la,j,e);
j++;
i--;
}
scanf("%d",&i);
j=1;
while(i>0)
{
scanf("%d",&e);
ListInsert_Sq(&lb,j,e);
i--;
j++;
}
mergelistsq(&la,&lb,&lc);
loadsq(&lc);
return 1;
}