1、关于数据结构的一道题

1、合并两个链表问题描述:设A与B分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接,本题不妨设按数据域值从小到大排列),list1和list2分别... 1、 合并两个链表
问题描述:设A与B分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接,本题不妨设按数据域值从小到大排列),list1和list2分别为指向两个链表的头指针。请写出将这两个链表合并为一个带头结点的有序循环链表的算法。

#include<stdio.h>
#include<stdlib.h>

typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*link;
void main()
{
int m,n;
link p1,p2,list;
Lnode *initlnode(int n);
Lnode *mergelist(link p1,link p2);
void printf(link list);
scanf("%d %d",&m,&n);
p1=initlnode(m);
p2=initlnode(n);
list=mergelist(p1,p2);
printf(list);
}
link initlnode(int y)
{
link list,a,b;
int i;
a=list=(link)malloc(sizeof(Lnode));
a->next=NULL;
for(i=0;i<y;i++)
{
b=(link)malloc(sizeof(Lnode));
scanf("%d",b->data);
b->next=NULL;
a->next=b;
a=b;
}
b->next=list;
return(list);
}
link mergelist(link p1,link p2)
{
link list,pa,pb,pc;
pa=p1->next;pb=p2->next;
pc=p1=list;
while(pa!=list&&pb!=list)
{
if(pa->data<=pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{pc->next=pb;
pc=pb;
pb=pb->next;}
}
if(pa==list)
{
pc->next=pb;
while(pc->next!=p2)
{
pc=pc->next;
}
pc->next=list;
}
else
{
pc->next=pa;
while(pc->next!=list)
{
pc=pc->next;
}
pc->next=list;

}
return(list);
}
void printf(link list)
{
link q;
q=list;
while(q->next!=list)
printf("%d",q->data);
q=q->next;
}
求高手释疑,请问哪里错了?
展开
 我来答
02230838
2010-10-02 · TA获得超过2067个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:1085万
展开全部
算了,贴这儿吧。
#include<stdio.h>
#include<stdlib.h>

typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*link;
void main()
{
int m,n;
link p1,p2,list;
Lnode *initlnode(int n);
Lnode *mergelist(link p1,link p2);
void printf(link list);

scanf("%d %d",&m,&n);
p1=initlnode(m);
p2=initlnode(n);
list=mergelist(p1,p2);
printf(list);
}
link initlnode(int y)
{
link head=NULL;
while (y--)
{
link temp = (link)malloc(sizeof(Lnode));
scanf("%d",&temp->data);
if (head && head->data<temp->data)
{
link before = head;
while (before->next!=head&&temp->data>before->data)
before = before->next;
temp->next = before->next;
before->next = temp;
}
else
{
temp->next = head?head:temp;
head = temp;
}
}
return head;
}
link mergelist(link p1,link p2)
{
link head = NULL;
link builder = head;
link p1Loader = p1, p2Loader = p2;
bool p1Round=false,p2Round=false;
while (1)
{
int v1,v2,v=-1;
if (p1Loader==p1 && p1Round)
break;
if (p2Loader==p2 && p2Round)
break;
v1 = p1Loader->data;
v2 = p2Loader->data;
if (v1<v2)
{
v = v1;
p1Loader = p1Loader->next;
p1Round = true;
}
else
{
v = v2;
p2Loader = p2Loader->next;
p2Round = true;
}

link temp = (link)malloc(sizeof(Lnode));
temp->data = v;
temp->next = NULL;

if (head)
{
builder->next = temp;
builder = temp;
}
else
{
builder = temp;
head = temp;
}
}
if (p1Round && p1Loader==p1)
{
int v;
while (1)
{
if (p2Loader==p2)
if (!p2Round)
p2Round = true;
else
break;
v = p2Loader->data;
p2Loader = p2Loader->next;
link temp = (link)malloc(sizeof(Lnode));
temp->data = v;
temp->next = NULL;

if (head)
{
builder->next = temp;
builder = temp;
}
else
{
builder = temp;
head = temp;
}
}
}
if (p2Round && p2Loader==p2)
{
int v;
while (1)
{
if (p1Loader==p1)
if (!p1Round)
p1Round = true;
else
break;
v = p1Loader->data;
p1Loader = p1Loader->next;

link temp = (link)malloc(sizeof(Lnode));
temp->data = v;
temp->next = NULL;

if (head)
{
builder->next = temp;
builder = temp;
}
else
{
builder = temp;
head = temp;
}
}
}
builder->next = head;
return head;
}
void printf(link list)
{
link q;
q=list;
while(q->next!=list)
{
printf("%d\t",q->data);
q=q->next;
}
printf("%d\t",q->data);

}
上海华然企业咨询
2024-10-28 广告
作为上海华然企业咨询有限公司的一员,我们深知大模型测试对于企业数字化转型与智能决策的重要性。在应对此类测试时,我们注重数据的精准性、算法的先进性及模型的适用性,确保大模型能够精准捕捉市场动态,高效分析企业数据,为管理层提供科学、前瞻的决策支... 点击进入详情页
本回答由上海华然企业咨询提供
ytu_math
2010-10-02 · TA获得超过1558个赞
知道小有建树答主
回答量:784
采纳率:100%
帮助的人:820万
展开全部
你的代码,太啰嗦了,实在没有耐心看完!

typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*link;
--》
typedef struct lnode{
int data;
struct lnode *next;
}Lnode,*link;

其他没仔细看!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式