1. 程式人生 > >將兩個有序連結串列併為一個有序連結串列

將兩個有序連結串列併為一個有序連結串列

#include 
#include 

#ifndef FALSE
#define FALSE 	(0)
#define TRUE	(!FALSE)
#endif

typedef int ElemType; 	
typedef struct LNode{			//
	ElemType 		data;
	struct LNode	*next;
}LNode, *LinkList;

LinkList CreateList(int n);
void PrintList(LinkList L);
LinkList MergeList(LinkList La, LinkList Lb, LinkList Lc);

LinkList MergeList(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;
	return Lc;
}

int 
main(void)
{
	int		i, anu, bnu;
	LinkList  La, Lb, Lc;

	printf("please input the number of lista:");
	scanf("%d", &anu);
	La = CreateList(anu);
	PrintList(La);

	printf("please input the number of listb:");
	scanf("%d", &bnu);
	Lb = CreateList(bnu);
	PrintList(Lb);

	Lc = MergeList(La, Lb, Lc);
	PrintList(Lc);
}

LinkList CreateList(int n)
{
	int 		i;
	LinkList 	L, p;
	L = (LinkList)malloc(sizeof(LNode));	
	if(L == NULL){
		printf("create linklist failure.\n");	
		return FALSE;
	}
	L->next = NULL;

	for(i = 0; i < n; i++){
		p = (LinkList)malloc(sizeof(LNode));	
		if(p == NULL){
			printf("create linknode error.\n");		
			return FALSE;
		}
		scanf("%d", &p->data);
		p->next = L->next;
		L->next = p;
	}

	return L;
}

void PrintList(LinkList L)
{
	while(1){
		printf("%d ", L->next->data);	
		L = L->next;
		if(L->next == NULL)break;
	}
	putc('\n', stdout);
}