标题:求助!单链表合并问题!
只看楼主
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
 问题点数:0 回复次数:16 
求助!单链表合并问题!

各位谁能按照我下面的意图将我不会下的代码写上,谁能帮助,谢谢!

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}Lnode,*LinkList;

LinkList CreateList(LinkList L,int value);
LinkList MergeList(LinkList La,LinkList Lb,LinkList Lc);
void Output(LinkList L);

int main(void)
{
LinkList La=NULL,Lb=NULL,Lc=NULL;
int i,n,value;

printf("Please input La length n:"); //创建链表La
scanf("%d",&n);
for(i=1;i<=n;i++) //n代表结点个数
{
scanf("%d",&value);
La=CreateList(La,value);
Output(La); //输出La
}

printf("Please input Lb length n:"); //创建链表Lb
scanf("%d",&n);
for(i=1;i<=n;i++) //n代表结点个数
{
scanf("%d",&value);
Lb=CreateList(Lb,value);
Output(Lb); //输出Lb
}

Lc=MergeList(La,Lb,Lc); //合并链表La,Lb
Output(Lc); //输出创建后的Lc表

return 0;
}

LinkList CreateList(LinkList L,int value) //创建链表函数
{
LinkList newPtr,previousPtr,currentPtr;

if((newPtr=(LinkList)malloc(sizeof(Lnode)))==NULL) //内存空间分配失败
{
exit(1);
}
newPtr->data=value;
newPtr->next=NULL;
previousPtr=NULL;
currentPtr=L;
while(currentPtr && currentPtr->data < value) //由小到大创建链表
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;
}
if(!previousPtr) //当链表为空时
{
newPtr->next=L;
L=newPtr;
}
else //链表不为空时
{
previousPtr->next=newPtr;
newPtr->next=currentPtr;
}
return L;
}

LinkList MergeList(LinkList La,LinkList Lb,LinkList Lc) //合并La,Lb成链表Lc
{
LinkList ca,cb,cc;

if(La && !Lb ) //当Lb为空表时
Lc=La;
else if(Lb && !La) //当La为空表时
Lc=Lb;
else
{

//当La和Lb都不为空表的情况下,用元素比较的方法每次将小者插入Lc中

}


return Lc;
}

void Output(LinkList L) //输出链表
{
while(L)
{
printf("%d->",L->data);
L=L->next;
}
printf("NULL\n");
}

请好心人帮我把MergeList()中的else部分按照我的意图写上,谢谢!

搜索更多相关主题的帖子: LinkList 单链 int NULL void 
2006-03-21 20:06
mwjpiero
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2006-3-4
得分:0 

看了一下,我认为你写的前面一部分程序都不能正常运行,你再看一下,还有你的Lc好像没有初始化,还有我觉得你创建La,Lb的函数方法有问题

2006-03-21 20:26
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
得分:0 
if(la<=lb)//la,lb分别是表a,b的长度,表a<表b(p,q,r分别是指向表la,lb,lc的指针)
{
{for(i=0;i<la;i++)//以表a为限,循环
if(*(p+i)-->date<=*(q+i)-->date)//比较a,b的数据
*(lc+i)-->date=*(p+i)-->date;//小的数据赋予表c
else *(lc+i)-->date=*(q+i)-->date;
}
for(i=la;i<lb;i++)//表a结束
*(r+i)-->date=*(q+i)-->date;//将表b剩下部分赋给表c
}
else
{
{for(i=0;i<lb;i++)//表b小于表a时
if(*(p+i)-->date<=*(q+i)-->date)
*(lc+i)-->date=*(p+i)-->date;
else *(lc+i)-->date=*(q+i)-->date;
}
for(i=la;i<la;i++)
*(r+i)-->date=*(p+i)-->date;
}
具体程序可能不对,你自己改改看嘛!

努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-03-21 20:48
mwjpiero
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2006-3-4
得分:0 

不用那么复杂吧,以前书上就几行

2006-03-21 21:01
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
得分:0 

书上面是没几行,但没有完整程序,看不明白


2006-03-21 21:09
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
得分:0 
3楼说的是顺序表吧

2006-03-21 21:10
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
得分:0 
else
{
while(La&&Lb)
{
if(La->daata<=Lb->data)
{
Lc->data=La->data;
La=La->next;
Lc=Lc->next;
}
else
{
Lc->data=Lb->data;
Lb=Lb->next;
Lc=Lc->next;
}
}
if(La&&!Lb)
{
while(La)
{
Lc->data=La->data;
La=La->next;
Lc=Lc->next;
}
}
if(!La&&Lb)
{
while(Lb)
{
Lc->data=Lb->data;
Lb=Lb->next;
Lc=Lc->next;
}
}
return Lc;
}
请指教

2006-03-21 21:28
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
得分:0 
以下是引用haishanglang在2006-3-21 21:28:00的发言:
else
{
while(La&&Lb)
{
if(La->daata<=Lb->data)
{
Lc->data=La->data;
La=La->next;
Lc=Lc->next;
}
else
{
Lc->data=Lb->data;
Lb=Lb->next;
Lc=Lc->next;
}
}
if(La&&!Lb) //La 的长度大于Lb,把La剩下的部分全部接到Lc上
{
while(La)
{
Lc->data=La->data;
La=La->next;
Lc=Lc->next;
}
}
if(!La&&Lb) //Lb 的长度大于La,把Lb剩下的部分全部接到Lc上

{
while(Lb)
{
Lc->data=Lb->data;
Lb=Lb->next;
Lc=Lc->next;
}
}
return Lc;
}
请指教


2006-03-21 21:35
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
得分:0 
楼上程序错误,放到我的程序中用不了

2006-03-21 21:50
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
得分:0 
,我觉得思想很简单的啊,就是一个个的比较嘛

2006-03-21 21:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-51885-1-1.html




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

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