注册 登录
编程论坛 数据结构与算法

l链表的合并问题 为什么我的MergList_L函数不能执行呢?求助

shayoyong 发布于 2010-03-12 21:48, 477 次点击
问题如题所述,代码如下

#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 编辑 ]
0 回复
1