第二章课后习题

算法设计题

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值