链表的创建、合并······

#include"stdio.h"
#include"stdlib.h"
#define error 0
#define ok 1
//声明结点
typedef struct mystruct{
	int elem;
	mystruct *pNext;

}node,*linklist;
//寻找指定元素,并返回
void Getelem(linklist L,int i,int &elem){
	linklist p=L;int j=0;
	while (p&&j<i)
	{
		p=p->pNext;
		++j;
	}
	if (!p||i<=0) goto here;
	elem=p->elem;
	here:;
	/*
	if(i==0) goto here;
	linklist p=L;
	for (int j= 0; j < i-1; j++)
	{
		p=p->pNext;
		if (!p) goto here;
	}
	elem=p->elem;
	here:;
	*/
}
//创建链表
void Creatlinklist(linklist &L,int n){
	//插入法创建链表
	L=(linklist)malloc(sizeof(node));
	linklist p;
	L->pNext=NULL;
	for (int i = n; i >0; i--)
	{
		p=(linklist)malloc(sizeof(node));
		printf("NO %d:",i);
		scanf("%d",&p->elem);
		p->pNext=L->pNext;
		L->pNext=p;
	}
	/*顺序建立
	L=(linklist)malloc(sizeof(node));
	linklist p;linklist pe;p=pe=L;
	for (int i = 0; i < n; i++)
	{
		p=(linklist)malloc(sizeof(node)) ;
		printf("NO %d:",i+1);
		scanf("%d",&p->elem);
		pe->pNext=p;
		pe=p;
		
	}
	p->pNext=NULL;
	*/
}
//插入结点
int listInsert(linklist &L,int i,int e){
	linklist p=L;
	int j=0;
	while (p&&j<i-1)
	{
		p=L->pNext;
		++j;
	}
	linklist s=(linklist)malloc(sizeof(node));
	if (!s|| j>i-1)return error;
	s->pNext=p->pNext;
	p->pNext=s;
	s->elem=e;
	return ok;
}
//删除结点
int listDelect(linklist &L,int i,int &e){
	linklist p=L;
	int j=0;
	while (p&&j<i-1)
	{
		p=p->pNext;
		++j;
	}
	if (!p->pNext||!p||j>i-1)return error;
	/*
	while (p->pNext&&j<i-1)
	{
		p=p->pNext;
		++j;
	}
	if (!p->pNext||j>i-1)return error;
	*/
	linklist q=p->pNext;
	e=q->elem;
	p->pNext=q->pNext;
	free(q);
	return ok;
}
//将两个非递减链表合成一个非递减链表
void Merge(linklist &la,linklist &lb,linklist &lc){
	lc=la;
	linklist pa=la->pNext,pb=lb->pNext,pc=lc;
	while (pa&&pb)
	{
		if (pa->elem <= pb->elem)
		{
			pc->pNext=pa;
			pa=pa->pNext;
		}else
		{
			pc->pNext=pb;
			pb=pb->pNext;
		}
		pc=pc->pNext;
	}
	pc->pNext=pa?pa:pb;
	/*
	垃圾算法:
	while (pa)
	{
		pc->pNext=pa;
		pa=pa->pNext;
		pc=pc->pNext;
	}
	while (pb)
	{
		pc->pNext=pb;
		pb=pb->pNext;
		pc=pc->pNext;
	}
	*/
	free(lb);//删去头部节点
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值