跪求编程大神帮我解答下此题~高分悬赏~在线等~急!!

用c语言
2025-02-21 22:32:22
推荐回答(1个)
回答1:

有点偷懒写的,不知道符不符合要求

#include
#define NULL 0

typedef struct Pnode//定义节点
{
int key;
Pnode *next;
}P;

P a,b,c;//三个链表的头结点

void init()//a,b链表初始化
{
P *p;
char c='a';
p=&a;
printf("请输入第一个链表数据,数字之间空格间隔(例:2 3 4):\n");
while(c!='\n')
{
scanf("%d",&p->key);
c=getchar();
p->next=new P;
p=p->next;
}
p->next=NULL;
c='a';
p=&b;
printf("请输入第二个链表数据,数字之间空格间隔(例:4 5 6):\n");
while(c!='\n')
{
scanf("%d",&p->key);
c=getchar();
p->next=new P;
p=p->next;
}
p->next=NULL;
}

void fanzhuan(P *head)//链表翻转,成为降序(非升)
{
P *p,*q;
int temp;
q=head;
while(q->next!=NULL)
{
p=q;
while(p->next!=NULL)
{
if(p->key>q->key)
{
temp=p->key;
p->key=q->key;
q->key=temp;
}
p=p->next;
}
q=q->next;
}
}

void hebing(P *a,P *b)//链表合并再翻转
{
P *p,*r;
int temp;
r=&c;
p=a;
while(p->next!=NULL)
{
r->key=p->key;
r->next=new P;
r=r->next;
p=p->next;
}
p=b;
while(p->next!=NULL)
{
r->key=p->key;
r->next=new P;
r=r->next;
p=p->next;
}
r->next=NULL;
r=&c;
fanzhuan(r);
}

void display(P *p)
{
P *q;
q=p;
while(q->next!=NULL)
{
printf("%d ",q->key);
q=q->next;
}
printf("\n");
}

int main()
{
init();
P *p,*q;
p=&a;
fanzhuan(p);
printf("\n链表一反转后为:");
display(p);
p=&b;
fanzhuan(p);
printf("链表二反转后为:");
display(p);
p=&a;
q=&b;
hebing(p,q);
p=&c;
printf("两链表合并后的非升序列为:");
display(p);
}