1、递归算法以下:web
/*有序单链表的合并,生成一个有序的单链表,递归作法*/
Linklist MergerLinklist(Linklist L0,Linklist L1)
{
LNode *Newhead;
if(L0 == NULL)
{
return L1;
}
else if(L1 == NULL)
{
return L0;
}
else
{
if(L0->data < L1->data )
{
Newhead=L0;
Newhead->next = MergerLinklist(L0->next,L1);
}
else
{
Newhead=L1;
Newhead->next = MergerLinklist(L1->next,L0);
}
}
return Newhead;
}
2、实例程序代码以下:算法
#include
#include
#include
#define LEN 5
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*Linklist;
/*单链表初始化*/
void Init_Linklist(Linklist *L)
{
*L=(Linklist)malloc(sizeof(LNode));
assert(*L != NULL);
(*L)->next=NULL;
}
/*建立单链表*/
void Create_Linklist(Linklist *L)
{
LNode *p,*q;
p = *L;
for(int i=0;i
{
q=(Linklist)malloc(sizeof(LNode));
assert( q != NULL);
scanf("%d",&q->data);
p->next=q;
p=q;
}
p->next=NULL;
}
/*有序单链表的合并,生成一个有序的单链表,递归作法*/
Linklist MergerLinklist(Linklist L0,Linklist L1)
{
LNode *Newhead;
if(L0 == NULL)
{
return L1;
}
else if(L1 == NULL)
{
return L0;
}
else
{
if(L0->data < L1->data )
{
Newhead=L0;
Newhead->next = MergerLinklist(L0->next,L1);
}
else
{
Newhead=L1;
Newhead->next = MergerLinklist(L1->next,L0);
}
}
return Newhead;
}
/*单链表的输出*/
void Print_Linklist(Linklist *L)
{
LNode *p;
p = *L;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
Linklist L0,L1,head=NULL;
/*单链表L0的初始化*/
printf("请输入第一个有序单链表:\n");
Init_Linklist(&L0);
Create_Linklist(&L0);
/*单链表L1的初始化*/
printf("请输入第一个有序单链表:\n");
Init_Linklist(&L1);
Create_Linklist(&L1);
/*单链表的有序合并*/
head=MergerLinklist(L0->next,L1->next);
printf("单链表合并后为:\n");
Print_Linklist(&head);
return 0;
}
2、运行截图为:
svg