回 帖 发 新 帖 刷新版面

主题:求各位大侠帮忙看哈C语言版数据结构中两递增单链表的合并问题

#include <stdio.h> 
#include<malloc.h>
#define  null 0
typedef struct node 
 { 
   int data; 
   struct node *next; 
 }linklist; 


void input(linklist *L)//输入函数
{
    linklist *r,*p,*head;
    int i,j;
    r=L;
    printf("input nums\n");
    for(i=0;i<3;i++)
    {
      scanf("%d",&j);
       p=(linklist *)malloc(sizeof(linklist));
      p->data=j;
      head=r;
      r->next=p;
      r=r->next;
    }
    r->next=null;
    r=L->next;
    while(r!=null)
    {
        printf("%2d",r->data);
        r=r->next;
    }
    printf("\n");
}

void swap(linklist *A,linklist*B,linklist*C)//两单链表合并函数
{
    linklist *p , *q, *r,*s;
    p=A;
    q=B;
    C=A;r=A;
    while(p!=null||q!=null)
        if(p->data<q->data)
        {
            r=p;
            p=p->next;
            p=q;
        }
        else(p->data>q->data)
        {
            s=q->next;
            r->next=q;
            r=p;
            p=s;
            
        }
        if(q!=null) r->next=q;
}


 void output(linklist*L)//输出函数
 {
     linklist *p;
         
    
     p=L;
    
     while(p!=null)
     {
         printf("%2d",p->data);

         p=p->next;
     }
 }


void main()
{
    linklist *L1,*L2,*L3;
    L1=L2=L3=(linklist *)malloc(sizeof(linklist));
    input(L1);
    input(L2);
    swap(L1,L2,L3);
    output(L3);

}

就是那个加上合并函数后程序就不能输出结果了 ,到底那错了啊?

回复列表 (共3个回复)

沙发

#include <stdio.h> 
#include<malloc.h>

#define  null 0

typedef struct node 
 { 
   int data; 
   struct node *next; 
 }linklist; 


void input(linklist *&L)//输入函数
{
    linklist *r,*p;
    p=(linklist *)malloc(sizeof(node));
    r=L;
    printf("input nums(-1 to quit): ");
    scanf("%d",&p->data);
    while(p->data!=-1)
    {
        r->next=p;
        r=p;
        p=(linklist *)malloc(sizeof(node));
        scanf("%d",&p->data);
    }
    r->next=NULL;
}

void mergelist(linklist *&A,linklist *&B,linklist *&C)//两单链表合并函数.这个函数有问题吗?
{
    linklist *p,*q,*r;
    p=A->next;  //A的第一个节点
    q=B->next;
    C=r=A;
    while(p && q)
    {
        if(p->data <= q->data)
        {
            r->next=p;
            r=p;
            p=p->next;
        }
        else
        {
             r->next=q;
             r=q;
             q=q->next;
        }
    }
    r->next=p?p:q;
    free(B);
}


 void output(linklist *L)//输出函数
 {
     linklist *p;
     p=L->next;
     while(p)
     {
         printf("%2d",p->data);
         p=p->next;
     }
     printf("\n");
 }


void main()
{
    linklist *L1,*L2,*L3;
    L1=L2=L3=(linklist *)malloc(sizeof(linklist));
    printf("对链表L1进行初始化!\n");
    input(L1);
    output(L1);
    printf("对链表L2进行初始化!\n");
    input(L2);
    output(L2);
    mergelist(L1,L2,L3);//此处有什么问题呢?
    printf("链表L1和L2合并后为: ");
    output(L3);
}
 
 

板凳

将上面的主函数改成如下:
void main()
{
    linklist *L1,*L2,*L3;
    L1=(linklist *)malloc(sizeof(linklist));
        L2=(linklist *)malloc(sizeof(linklist));
        L3=(linklist *)malloc(sizeof(linklist));//这里,要分配3块不同的内存.
    printf("对链表L1进行初始化!\n");
    input(L1);
    output(L1);
    printf("对链表L2进行初始化!\n");
    input(L2);
    output(L2);
    mergelist(L1,L2,L3);//此处有什么问题呢?
    printf("链表L1和L2合并后为: ");
    output(L3);
}

3 楼

谢谢了

我来回复

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