l链表的合并问题 为什么我的MergList_L函数不能执行呢?求助
问题如题所述,代码如下#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*
int InitList(LinkList L)
{
L=NULL;
return OK;
} 不带头结点的初始化
*/
int InitList_L(LinkList *L) //建立一个只含头结点的空链表
{
(*L)=(LinkList)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
(*L)->next=NULL;
return OK;
}
//头文件LinkList .h结束
int CreateList_L(LinkList *L,int n) //建立含n个元素的单链表
{
LinkList p,q;
int i;
printf("Input the datas : \n");
q=*L;
for(i=0;i<n;i++ )
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=NULL;
q->next=p;
q=q->next;
/*
p->next=q->next;
q->next=p;
q=p;
*/
}
return OK;
}
int TraverseList_L(LinkList L) //遍历链表
{
LinkList p;
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
return OK;
}
void MergList_L(LinkList *La,LinkList *Lb,LinkList *Lc)
{
LinkList pa,pb,pc;
pa=(*La)->next;pb=(*Lb)->next;
(*Lc)=pc=(*La);
while( pa&&pb)
{
if(pa->data <= pb->data)
{pc->next = pa; pc=pb; pa=pa->next;} //这里错把pb赋给pc了 。囧大
else
{pc->next=pb;pc=pb;pb=pb->next;}
}
pc->next=pa?pa:pb;
free(Lb);
}
int main()
{
int n1,n2;
LinkList La,Lb,Lc;
InitList_L(&La);
InitList_L(&Lb);
InitList_L(&Lc);
printf("Input the length of the list La: ");
scanf("%d",&n1);
CreateList_L(&La,n1);
printf("output the datas:");
TraverseList_L(La);
printf("Input the length of the list Lb: ");
scanf("%d",&n2);
CreateList_L(&Lb,n2);
printf("output the datas:");
TraverseList_L(Lb);
printf("MergList la and lb : ");
MergList_L(&La,&Lb,&Lc);
printf("output the datas: ");
TraverseList_L(Lc);
//system("pause");
return 0;
}
问题已解决
[ 本帖最后由 shayoyong 于 2010-3-13 09:02 编辑 ]