回 帖 发 新 帖 刷新版面

主题:创建两个链表   实现两个链表的合并


#include  <stdio.h>
#include <stdlib.h>

#define  n 0    
/*=========定义节点===========*/
typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode,*linklist;

linklist create_linklist()
{
    linklist  l,s,r;
    int x;
    l=(Lnode*)malloc(sizeof(Lnode));
    l->next=NULL;
    r=l;        //用于指向当前链表的尾结点
    scanf("%d",&x);
    while(x!=n)
    {
        s=(Lnode*)malloc(sizeof(Lnode));     //生成新结点
        s->data=x;
        s->next = r->next;
        r->next=s;
        r=s;        //生成的新结点插入到表尾
        scanf("%d",&x);


    }
    r->next=NULL;
    return  l;
}
void  list_linklist(linklist A)
{
     linklist  p;
     p=A->next;
     while(p!=NULL)
     {
         printf("%d \n",p->data);
         p=p->next;
         
     }
    // printf("/n");
}
linklist  merg(linklist A ,linklist B)
{
    linklist  c;
    Lnode  *p,*q,*s,*r;
    c = (Lnode*)malloc(sizeof(Lnode));
    c->next=NULL;
    p=A->next;
    q=B->next;
//    c=A;
    r=c;
    while(p&&q)
    {
       if(p->data<q->data)
       {
           s=p;
           p=p->next;

       }
       else
       {
           s=q;
           q=q->next;

       }
       r->next=s;
       r=s;                //从A,B表中选择较小的插入到C表中去
    }
    if(p==NULL)
    {
        p=q;
    }
//    r->next=q;
    r->next = (q!=NULL? q:p);
    return  c;

}
void main()
{
    linklist A,B,C;
    printf("输入链表A的内容(从小到大输入):\n");
     A=create_linklist();

     printf("输入链表B的内容(从小到大输入):\n");
     B=create_linklist();
     printf("链表A为:\n");
     list_linklist(A);
     printf("链表B为:\n");
     list_linklist(B);
     C=merg(A,B);
     printf("合并后的表为:\n");
     list_linklist(C);
     system("pause");
}      
//编译不报错,功能却无法实现,请高手帮忙

回复列表 (共1个回复)

沙发

有什么错误?
我运行一下在有序的情况下除了两个相等的不会排除一个外,其他都可以正确运行.

1 3 0
2 4 0
1
3

2
4



3
4

1 3 0
2 3 0
1
3

2
3

1
2
3
3

我来回复

您尚未登录,请登录后再回复。点此登录或注册