发布网友 发布时间:2022-04-22 06:50
共3个回答
热心网友 时间:2022-06-16 22:01
#include<stdio.h>
#include<malloc.h>
#define NULL 0
struct node
{
int data;
struct node *next;
};
struct node *head,*head_a;
struct node *create()
{
struct node *tail, *p;
int x;
head=tail=NULL;
printf("\n请输入一个整数:\n");
scanf("%d",&x);
while(x!=0)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=x;
p->next=NULL;
if(head==NULL)
head=tail=p;
else
{
tail->next=p;
tail=p;
}
printf("\n请输入一个整数:\n");
scanf("%d",&x);
}
return(head);
}
struct node *unite(struct node *a,struct node *b)
{
struct node *ha;
ha=head_a;
while(ha->next!=NULL)
ha=ha->next;
ha->next=head;
return(a);
}
void sortf()
{
struct node *p;
int temp;
L: p=head_a;
p=head_a;
while(p->next!=NULL)
{
if(p->data>p->next->data)
{
temp=p->data;
p->data=p->next->data;
p->next->data=temp;
}
p=p->next;
}
p=head_a;
while(p->next!=NULL)
{
if(p->data>p->next->data)
{
goto L;
}
p=p->next;
}
// return(a);
}
void main()
{
struct node *A,*B,*C,*LA;
printf("\n请输链表A的值,以0结束:\n");
LA=head_a=A=create();
printf("\n请输链表B的值,以0结束:\n");
B=create();
/////////////////////////////
printf("\n链表A的值:\n");
while(LA!=NULL)
{
printf("%d\t",LA->data);
LA=LA->next;
}
C=unite(A,B);
printf("\n链表B的值:\n");
printf("\n");
while(B!=NULL)
{
printf("%d\t",B->data);
B=B->next;
}
printf("\n链表C的值:\n");
printf("\n");
LA=head_a;
while(LA!=NULL)
{
printf("%d\t",LA->data);
LA=LA->next;
}
printf("\n");
printf("\n经过排序后链表C的值:\n");
printf("\n");
sortf();
LA=head_a;
while(LA!=NULL)
{
printf("%d\t",LA->data);
LA=LA->next;
}
printf("\n");
}
几经波折才算搞清楚..弄出来了!!!!!!!!!!!!!!!
热心网友 时间:2022-06-16 22:01
将A表第一个数据的head指针赋值给C表head指针
将A表中最后一个数据的next指针转为指向B表第一个数据的head指针
然后将C表重新排列即可```
这样就不需要重新开辟新的内存空间
热心网友 时间:2022-06-16 22:02
其实思想是很清晰的,但是这玩意要是写起来就费劲了