#include <stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void createLinkList(LinkList *L,int n); //逆向建立单链表
void createLinkListZ(LinkList *L,int n);
void traverseLinkList(LNode L);
int getElem(LNode L,int i,LinkList *e);
int listInsert(LinkList *L,int i,ElemType e);
int listDelete(LinkList *L,int i,ElemType *e);
void mergeLinkList(LinkList *La,LinkList *Lb,LinkList *Lc);
void main()
{
LinkList L,L1,L3;
//ElemType e;
createLinkListZ(&L,5);
traverseLinkList(*L);
printf("/n");
createLinkListZ(&L1,5);
traverseLinkList(*L1);
mergeLinkList(&L,&L1,&L3);
traverseLinkList(*L3);
/* listDelete(&L,3,&e);
traverseLinkList(*L);
createLinkList(&L,0);
listInsert(&L,3,3);
traverseLinkList(*L);
*/
}
void createLinkList(LinkList *L,int n)
{
LinkList p,q;
int i;
q=(*L)=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL;
for(i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
}
}
void createLinkListZ(LinkList *L,int n)
{
LinkList p,q;
int i;
q=(*L)=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL;
for(i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=p;
}
q->next=NULL;
}
void traverseLinkList(LNode L)
{
LinkList p;
int i=0;
p=L.next;
while(p)
{
printf("%d ",p->data);
p=p->next;
i++;
if(0==i%5)
{
printf("/n");
}
}
}
int getElem(LNode L,int i,LinkList *e)
{
LinkList p;
int j=1;
p=L.next;
while(j<i && p)
{
p=p->next;
j++;
}
if(j>i || !p)
{
printf("postion is error!!!/n");
return 1;
}
*e=p;
return 0;
}
int listInsert(LinkList *L,int i,ElemType e)
{
LinkList q,p;
if((*L)==NULL)
{
return 2;
}
q=(LinkList)malloc(sizeof(LNode));
q->data=e;
if(1==i)
{
q->next=(*L)->next;
(*L)->next=q;
}
else if(getElem((**L),i-1,&p)==0)
{
q->next=p->next;
p->next=q;
return 0;
}
return 1;
}
int listDelete(LinkList *L,int i,ElemType *e)
{
LinkList p,q;
if(1==i)
{
q=(*L)->next;
(*L)->next=q->next;
*e=q->data;
free(q);
return 0;
}
else if(getElem((**L),i-1,&p)==0)
{
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return 0;
}
return 1;
}
void mergeLinkList(LinkList *La,LinkList *Lb,LinkList *Lc)
{
LinkList pa,pb,pc;
pa=(*La)->next;
pb=(*Lb)->next;
(*Lc)=pc=(*La);
while(pa && pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(*Lb);
}