| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2048 人关注过本帖
标题:链表合并~
只看楼主 加入收藏
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
链表合并~
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*Linklist;

Linklist la,lb, l;

 Linklist creat(int n){

    Linklist head, node, end;
    head = (Linklist)malloc(sizeof(LNode));
    
    head->next=NULL;
    
    end = head;     
    printf("请输入%d个数",n);

    for (int i = 0; i < n; i++) {

        node = (Linklist )malloc(sizeof(LNode));

        
        scanf("%d", &node->data);

        end->next = node;

        end = node;

    }
    end->next=NULL;
    return head;

}
void print()
{
    Linklist p;
    p=l->next;
    while(p)
    {
      printf("%d ",p->data);
      p=p->next;
    }
}

Linklist mergelist()
{
    Linklist pa,pb,pc,head;
    pa=la->next;
    pb=lb->next;
    l=la;
    l->next=NULL;
    if(pa->data<pb->data)
    {
        pc=pa;
        pa=pa->next;
    }
    else
    {
        pc=pb;
        pb=pb->next;
    }
    while(pa&&pb)
    {    
        if(pa->data<=pb->data)
        {
        pa->next=pc;
        pc=pa;
        pa=pa->next;
        }     
        else
        {
        pb->next=pc;
        pc=pb;
        pb=pb->next;    
        }    
   }
    if(pa=NULL)
    {
        while(pb!=NULL)
        {    
            pb->next=pc;
            pc=pb;
            pb=pb->next;
        }
        pb->next=NULL;
        l->next=pc;
    }
    else
    {
        while(pb!=NULL)        
        {
            pa->next=pc;
            pc=pa; 
            pa=pa->next;
        }
        pa->next=NULL; 

        l->next=pc;
    }
    return l;
} 

 
int  main()
{
    la=creat(4);
    lb=creat(4);
    l=mergelist();
    print();
    return 0;
}


可以输入两个链表的数据,但没办法输出合并后的数据,相知道错在哪?
搜索更多相关主题的帖子: data next NULL pb pc 
2019-04-05 11:23
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
补充一下~
代码是要实现把两个非递减的链表合并成一个非递增的链表
像链表1 :1 3 8 9
链表2:4 7 9 18
合并成链表3:18 9 9 8 7 4 3 1
2019-04-05 11:27
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
求大神解答🙏🙏
2019-04-05 17:32
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:10 
//代码合并那里太复杂了,给你简化了点
//按照两个链表的最小值插入,不过采用头插法,这样最小值就会在链表尾部
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*Linklist;

Linklist la,lb, l;

 Linklist creat(int n){

    Linklist head, node, end;
    head = (Linklist)malloc(sizeof(LNode));
    
    head->next=NULL;
    
    end = head;     
    printf("请输入%d个数",n);

    for (int i = 0; i < n; i++) {

        node = (Linklist )malloc(sizeof(LNode));

        
        scanf("%d", &node->data);

        end->next = node;

        end = node;

    }
    end->next=NULL;
    return head;

}
void print()
{
    Linklist p;
    p=l->next;
    while(p)
    {
      printf("%d ",p->data);
      p=p->next;
    }
}

Linklist mergelist()
{
    Linklist pa,pb,pc,tmp;
    pa=la->next;
    pb=lb->next;

    pc = (Linklist )malloc(sizeof(LNode));
    l=pc;
    l->next=NULL;
    while(pa!=NULL || pb!=NULL){
        if(pa!=NULL && pb!=NULL){
            if(pa->data <=pb->data){
                tmp = pa;
                pa=pa->next;
            }else{
                tmp = pb;
                pb=pb->next;
            }
        }else if(pa==NULL){
            tmp = pb;
            pb=pb->next;
        }else{
            tmp = pa;
            pa=pa->next;
        }
        tmp->next = l->next;
        l->next = tmp;
    }
    
    return l;
} 

 
int  main()
{
    la=creat(4);
    lb=creat(4);
    l=mergelist();
    print();
    return 0;
}
2019-04-05 18:55
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
回复 4楼 word123
谢谢你让我又了解了一种新的方法~但是我还是想知道我错在哪,下午我把我的代码改了下,能输出了,但不准确,代码比起你的复杂很多,但我很想知道错在哪  你能帮我看一下吗
程序代码:
#include<stdio.h>
#include<stdlib.h> 

typedef struct student{

    int data;

    struct student *next;

} *LinkList,Linklist;

LinkList LA,LB,LC;
LinkList creat(int n){

    LinkList  node, end;
    
    LC = (LinkList )malloc(sizeof(Linklist));

    LC->next=NULL;
    
    end = LC; 
    printf("请输入%d个数",n);

    for (int i = 0; i < n; i++) {

        node = (LinkList )malloc(sizeof(Linklist));
        
        node->next=NULL;
        
        scanf("%d", &node->data);

        end->next = node;

        end = node;

    }
    return LC;
}


LinkList MergeList()
{

    LinkList pa,pb,pc,pre;
    pa=LA->next;
    pb=LB->next;

    pc=NULL;

    LC=LA;
    LA->next=NULL;
    LB->next=NULL;
    
    if(pa->data<pb->data)
    {
        pc=pa;
        pa=pa->next;
     } 
     else
     {
         pc=pb;
         pb=pb->next;
     }
     
    while(pa&&pb)
    {    
        if(pa->data<=pb->data)
        {
        pre=pa->next;
        pa->next=pc;
        pc=pa;
        pa=pre;
        }     
        else
        {
        pre=pb->next;
        pb->next=pc;
        pc=pb;
        pb=pre;    
        }    
    }
    if(pa=NULL)
    {
        while(pb!=NULL)
        {    
            pre=pb->next;
            pb->next=pc;
            pc=pb;
            pb=pre;
        }
    }
    else
    {
        while(pa!=NULL)        
        {
            pre=pa->next;
            pa->next=pc;
            pc=pa; 
            pa=pre;
        }

    }
    LC->next=pc;
    return LC;
}

void print()
{ 
        while (LC->next != NULL) 
        {
        LC = LC->next;
        printf("%d ", LC->data);
        }

}

int main()
{
    
    LA=creat(4);
    LB=creat(4);
    LC=MergeList();
    print();
    
    return 0; 

 } 

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2019-4-5 19:42编辑过]

2019-04-05 19:40
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
if(pa=NULL)   //这个是赋值语句,你不是判断语句吗
2019-04-05 21:15
桔梗老板
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2019-3-25
收藏
得分:0 
回复 6楼 word123
我又写欠了!!!
还有我把这个
程序代码:
 if(pa->data<pb->data)
    {
        pc=pa;
        pa=pa->next;
     } 
     else
     {
         pc=pb;
         pb=pb->next;
     }


改成
程序代码:
 if(pa->data<pb->data)
    {
        pc=pa;
        pa=pa->next;
        pc->=NULL;
     } 
     else
     {
         pc=pb;
         pb=pb->next;
         pc->=NULL;
     }

就ok了!
谢谢你~~
2019-04-05 21:47
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
2019-04-05 21:52
快速回复:链表合并~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020074 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved