| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1764 人关注过本帖
标题:链表合并问题
只看楼主 加入收藏
Love_2009
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2009-8-18
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:3 
链表合并问题
#include "stdio.h"
#include "malloc.h"
typedef struct node
{
    int data;
    struct node *next;
}NODE;
NODE *create();
void lianbiaohebing(NODE *pa,NODE *pb);
void print(NODE *head);
main()
{
    NODE *la,*lb;
    printf("请输入第一个链表的元素:\n");
    la=create();
    printf("请输入第一个链表的元素:\n");
    lb=create();
    lianbiaohebing(la,lb);
    print(la);

}
NODE *create()
{
    NODE *p,*q,*head;
    int a,n;
    printf("请你输入链表的长度:");
    scanf("%d",&n);
    head=(NODE *)malloc(sizeof(NODE));
    q=head;
    printf("请你输入链表的个元素:");
    while(n>0)
    {
        scanf("%d",&a);
        p=(NODE *)malloc(sizeof(NODE));
        p->data=a;
        q->next=p;
        q=p;
        n--;
    }
    p->next=NULL;
    return (head);
}
void lianbiaohebing(NODE *la,NODE *lb)
{
    NODE *pa,*pb,*q;
    pa=la->next;
    pb=lb->next;
    while(pa&&pb)
    {
        if(pa->data<=pb->next)
        {
            q->next=pa;
            q=pa;
            pa=pa->next;
        }
        else
        {
            q->next=pb;
            q=pb;
            pb=pb->next;
        }

    }
    q->next=(pa?pa:pb);
    free(lb);
}
void print(NODE *head)
{
    NODE *a;
    a=head->next;
    printf("输出链表为:");
    while(a!=NULL)
    {
        printf("%d",a->data);
        a=a->next;
    }
}


帮我看一下哪里错了,谢谢各位了



搜索更多相关主题的帖子: 链表 
2009-11-19 22:13
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
程序代码:
#include "stdio.h"
#include "malloc.h"
typedef struct node 
{
    int data;
    struct node *next;
}NODE;
NODE *create();
void lianbiaohebing(NODE *pa,NODE *pb);
void print(NODE *head);
main()
{
    NODE *la,*lb;
    printf("请输入第一个链表的元素:\n");
    la=create();
    printf("请输入第一个链表的元素:\n");
    lb=create();
    lianbiaohebing(la,lb);
    print(la);

}
NODE *create()
{
    NODE *p,*q,*head;
    int a,n;
    printf("请你输入链表的长度:");
    scanf("%d",&n);
    head=(NODE *)malloc(sizeof(NODE));
    q=head;
    printf("请你输入链表的个元素:");
    while(n>0)
    {
        scanf("%d",&a);
        p=(NODE *)malloc(sizeof(NODE));
        p->data=a;
        q->next=p;
        q=p;
        n--;
    }
    p->next=NULL;
    return (head);
}
void lianbiaohebing(NODE *la,NODE *lb)
{
    NODE *pa,*pb,*q;
    pa=la->next;
    pb=lb->next;
    while(pa&&pb)
    {
        if(pa->data<=pb->next)   //  LZ让完全不同的两个变量进行比较是什么意思呢???  前者是整型,后者是结构体··
        {
            q->next=pa;
            q=pa;
            pa=pa->next;
        }
        else
        {
            q->next=pb;
            q=pb;
            pb=pb->next;
        }

    }
    q->next=(pa?pa:pb);
    free(lb);
}
void print(NODE *head)
{
    NODE *a;
    a=head->next;
    printf("输出链表为:");
    while(a!=NULL)
    {
        printf("%d",a->data);
        a=a->next;
    }
}
2009-11-19 22:20
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
收藏
得分:0 

if(pa->data<=pb->next)
仔细看看有什么错误!
这个程序出现逻辑错误。正在修改中,耐心等待……
2009-11-19 22:32
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
收藏
得分:10 
此题的逻辑错误在于为什么将p->next=pa呢?能解释一下这句话的意思吗?
按照LZ的想法应该是如果a链表的值小于不链表就将pa往后移一个,如果a链表的pa节点的值大于b链表的pb节点值就将pb的节点接到pa节点的后面。那是不是要在pa节点前还必须有一个指针呢?
但是你的pa节点的初始位置是在头结点后的第一位,那么pa节点的前一个节点的初始位置应该是头结点,即你想要的q的位置!
好了,解决了第一个问题再来看看合并的问题.
 else
        {
            q->next=pb;
            q=pb;
            pb=pb->next;
        }
这是你的合并函数。你的q已经移到了pb的位置上了并且你的pb也指向下一个节点,但是LZ想过没有,你只把q移到pb上,但是此时你的q并不是pa的前一个节点,此时你的q节点已经成为pb的前一个节点。LZ仔细想下这里该怎么改。
还有就是q节点到底该在什么时候接到pa上,是在pb指向下一个节点前接还是pb指向下一个节点后接,这里要仔细想想。


仔细看看吧,有好处的。如还有疑问请发帖联系我。
2009-11-19 22:50
快速回复:链表合并问题
数据加载中...
 
   



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

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