#include <stdio.h>
#include <stdlib.h>
//先逆置变成非递增链表,再头插一次
typedef struct LNODE
{
int data;
struct LNODE *next;
}LNODE;
LNODE* create_list()
{
LNODE *p = (LNODE*)malloc(sizeof(LNODE));
if(!p) exit(-1);
p->next = NULL;
return p;
}
LNODE* reverse_list(LNODE *L)
{
LNODE *p = L ->next;
LNODE *q;
L->next = NULL;
while(p) //头插法逆置
{
q=p;
p=p->next;
q->next=L->next;
L->next = q;
}
return L;
}
LNODE* InsertByHead(LNODE *L,int x)
{
LNODE *p = (LNODE*)malloc(sizeof(LNODE));
p->data = x;
p->next = L->next;
L->next = p;
return L;
}
//LNODE* InsertByTail(LNODE *L,int x)
//{
// LNODE *r=L;
//
// LNODE *p = (LNODE*)malloc(sizeof(LNODE));
// p->data = x;
//
// r->next = p;
// r = r ->next;
// r->next=NULL;
// return L;
//}
void printlist(LNODE *L)
{
LNODE *p = L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
LNODE *La=create_list(),*Lb=create_list();
int m,n;
scanf("%d %d",&m,&n);
while(m--)
{
int x;
scanf("%d",&x);
InsertByHead(La,x);
}
while(n--)
{
int x;
scanf("%d",&x);
InsertByHead(Lb,x);
}
LNODE *pa=La->next,*pb=Lb->next;
La->next = NULL;
while(pa&&pb)
{
if(pa->data > pb->data)
{
InsertByHead(La,pa->data);
pa=pa->next;
}
else
{
InsertByHead(La,pb->data);
pb=pb->next;
}
}
if(pa)
{
while(pa)
{
InsertByHead(La,pa->data);
pa=pa->next;
}
}
else if(pb)
{
while(pb)
{
InsertByHead(La,pb->data);
pb= pb->next;
}
}
reverse_list(La);
printlist(La);
return 0;
}
数据结构理论课noj(4) 单链表的归并
于 2022-03-27 10:37:15 首次发布