永发信息网

数据结构与算法:已知两个递增单链表ab,合成一个递减的单链表c,要求使用单链表基本操作,伪代码

答案:1  悬赏:80  手机版
解决时间 2021-03-18 05:18
  • 提问者网友:皆是孤独
  • 2021-03-17 08:09
数据结构与算法:已知两个递增单链表ab,合成一个递减的单链表c,要求使用单链表基本操作,伪代码
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-03-17 08:25
#include
#include 

typedef struct node
{
int data;
struct node *next;
}node,*list;
void init(list &head)
{
head=(list)malloc(sizeof(node));
head->next=NULL;
}

void input(list &h)
{
list p,q;
q=h;
printf("输入数据的个数 n : ");
int n;
scanf("%d",&n);
printf("请输入 %d 个有序递增数据:
",n);
for (int i=0;i {
// printf("第 %d 个: ",i+1);
p=(list)malloc(sizeof(node));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;
}
}

void output(list h)
{
list p;
p=h->next;
printf("输出数据
");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("
");
}

void combine(list &a,list &b,list &c)
{
list p,q,t;
p=a->next;
q=b->next;
free(b);
b=q;
c=a;
a=p;
c->next=NULL;
while(p&&q)
{
if (p->data<=q->data)
{
a=a->next;
p->next=c->next;
c->next=p;
p=a;
}
else
{
b=q->next;
q->next=c->next;
c->next=q;
q=b;
}
}
if (p!=NULL)
{
while(p)
{
a=a->next;
p->next=c->next;
c->next=p;
p=a;
}
}
if (q!=NULL)
{
while(q)
{
b=q->next;
q->next=c->next;
c->next=q;
q=b;
}
}

}
void main()
{
list a,b,c;
init(a);init(b);
printf("
输入链表A :
");
input(a);
printf("
输入链表B :
");
input(b);

printf("输出合并后的链表:
");
combine(a,b,c);
output(c);
}
结果:
输入链表A :
输入数据的个数 n : 3
请输入 3 个有序递增数据:
4 5 9

输入链表B :
输入数据的个数 n : 4
请输入 4 个有序递增数据:
2 3 7 10

输出合并后的链表:
输出数据
10 9 7 5 4 3 2
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯