算法设计题
2.
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode
{
int elem;
struct LinkNode *next;
}LinkNode;
//CreatLinkList and Initil LinkList
LinkNode *CreatList()
{
LinkNode *L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
return L;
}
//Add Elem
LinkNode *AddElem(LinkNode *L)
{
int n,i;
puts("请输入要添加的元素个数:");
scanf("%d",&n);
printf("请输入 %d 个数\n",n);
LinkNode *tail=L;
for(i=0;i<n;i++)
{
LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
scanf("%d",&p->elem);
p->next=NULL;
tail->next=p;
tail=p;
}
return L;
}
//Trverse Print List
void PrintList(LinkNode *L)
{
L=L->next;
while(L)
{
printf("%d ",L->elem);
L=L->next;
}
puts("");
}
//
LinkNode *ListH(LinkNode *La,LinkNode *Lb)
{
LinkNode *Lc,*pa,*pb,*pc,*p;
Lc=La;
// pc=Lc;
pa=La->next;
pb=Lb->next;
Lc->next=NULL;
while(pa||pb)
{
if(!pa)
{
p=pb;
pb=pb->next;
}
else if(!pb)
{
p=pa;
pa=pa->next;
}
else if(pa->elem>=pb->elem)
{
p=pb;
pb=pb->next;
}
else
{
p=pa;
pa=pa->next;
}
p->next=Lc->next;
Lc->next=p;
}
return Lc;
}
//
int main(void)
{
LinkNode *La=CreatList();
LinkNode *Lb=CreatList();
LinkNode *Lc=CreatList();
La=AddElem(La);
Lb=AddElem(Lb);
PrintList(La);
PrintList(Lb);
La=ListH(La,Lb);
PrintList(La);
return 0;
}