| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 293 人关注过本帖
标题:求指教:将有序的 2 个链表合为一个有序链表没错误,但输不出结果
只看楼主 加入收藏
chenyan1995
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-10-31
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
求指教:将有序的 2 个链表合为一个有序链表没错误,但输不出结果
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0   
typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList &l)//初始化
{
    l=(LinkList)malloc(sizeof(LNode));
    l->next=NULL;
}

int CreaList(LinkList &l,int *a,int n)//建链表 ,&可以不用带,初始化时l就指向了头节点,以后不用改变l的值
{
    LinkList p, q;//q指向尾节点
    int i;
    q=l;
    for(i=0;i<n;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        q->next=p;
        p->data=a[i];
        q=p;
    }
    q->next=NULL;
    return 0;
}

void DispList(LinkList l)//输出
{
    LinkList p;
    p=l->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
int DeleteList(LinkList &l,int i)//删除
{
    LinkList p,q;
    p=l;
    q=l->next;
    while(q!=NULL)
    {
        if(q->data==i)break;//用break终止此循环 ,多级连用是要注意NULL
        p=p->next;
        q=p->next;
    }
    if(q==NULL)return 0;/////////////////
    p->next=q->next;
    free(q);//释放q
    return  1;
}

void mergelist(LinkList la,LinkList lb)//?????????????????????? 有序链表合为一个
{
    LinkList pa,pb,pc,r;
    int i;
    pa=la->next;
    pb=lb->next;
    while(pa->next!=NULL)
    pa=pa->next;
    pa->next=pb;
    free(lb);//将2个链表合成一个,释放lb
    //DispList(la);
    pa=la->next;
    pc=pa->next;
    while(pa->next)
    {
        while(pc)
        {
            if(pa->data==pc->data)
            {
                r=pc;//删除该节点后pc将无所指。。。。。。。。。
                pc=pc->next;
                DeleteList(la,r->data);
            }
            else if(pa->data>pc->data)
            {
                i=pa->data;
                pa->data=pc->data;
                pc->data=i;
                pc=pc->next;
            }
            else
            {
                pc=pc->next;
            }
        }
        pa=pa->next;
        pc=pa->next;
    }
}

int main()
{
    LinkList la,lb;
    int a[10],b[10];
    int i,m,n;
    InitList(la);
    InitList(lb);
    printf("集合A中元素个数为:\n");
    scanf("%d",&m);
    printf("输入A中元素数为:\n");
    for(i=0;i<m;i++)
    {
        //getchar();
        scanf("%d",&a[i]);
    }
    CreaList(la,a,m);
    printf("A是:\n");
    DispList(la);
    printf("集合B中元素个数为:\n");
    scanf("%d",&n);
    printf("输入B中元素数为:\n");
    for(i=0;i<n;i++)
    {
        //getchar();
        scanf("%d",&b[i]);
    }
    CreaList(lb,b,n);
        printf("B是:\n");
    DispList(lb);
    mergelist(la,lb);
    printf("AUB是:\n");
    DispList(la);
}
搜索更多相关主题的帖子: include 
2014-10-31 15:03
fdjiangwu
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:6
专家分:33
注 册:2012-10-21
收藏
得分:20 
InitList()函数实现有问题,修改为如下即可
void InitList(LinkList *l)//初始化
{
    (*l)=(LinkList)malloc(sizeof(LNode));
    (*l)->next=NULL;
};
另外调用的时候请如下调用
InitList(&la);
InitList(&lb);
2014-10-31 16:39
快速回复:求指教:将有序的 2 个链表合为一个有序链表没错误,但输不出结果
数据加载中...
 
   



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

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