- 首页 > it技术 > >
数据结构|数据结构 链表 合并两个有序的单链表 C语言版
#include
#include
typedef struct Node
{
int data;
struct Node * next;
} Node,* Linklist;
//定义链表的结点,链表头void Initlist (Linklist *L)//初始化链表
{
*L=(Linklist)malloc(sizeof(Node));
(*L)->next=NULL;
}void CreateFromTail(Linklist L) //尾插发建表
{
Node *r,*s;
r=L;
//r总是指向链表的最后结点,s是新的结点
int flag=1;
int num;
while(flag)
{
scanf("%d",&num);
if(num!= -1)
{
s=(Node *) malloc(sizeof(Node));
s->data=https://www.it610.com/article/num;
r->next=s;
r=s;
}
else{
flag=0;
r->next=NULL;
}
}
return ;
}void Output(Linklist L)//输出单链表
{
Node *temp;
temp=L->next;
while(temp !=NULL)
{
printf("%d ",temp->data);
temp=temp->next;
}
printf("\n");
}Linklist Unionlist(Linklist LA,Linklist LB)
{
Linklist LC;
Initlist(&LC);
Node *pa,*pb,*r;
pa=LA->next;
pb=LB->next;
r=LC;
while(pa!=NULL && pb!=NULL)
{
if(pa->data<=pb->data)
{
r->next=pa;
r=pa;
pa=pa->next;
}
else{
r->next=pb;
r=pb;
pb=pb->next;
}
}
if(pa)
r->next=pa;
else
r->next=pb;
free(LB);
free(LA);
return(LC);
}int main()
{
Linklist LA,LB,LC;
Initlist(& LA);
Initlist(& LB);
printf("输入递增单链表LA 以-1为结束标志\n");
CreateFromTail(LA);
Output(LA);
printf("输入递增单链表LB 以-1为结束标志\n");
CreateFromTail(LB);
Output(LB);
if(LA->next==NULL) printf("srwefewfawefw\n");
LC=Unionlist(LA,LB);
printf("合并为一个有序的单链表为\n");
Output(LC);
}
推荐阅读