链表的部分函数封装

根据位置查找

/*
 函数功能:链表按位置查找
 函数参数:头结点地址,查找的位置
 函数返回值:传参异常/pos异常:NULL  成功:查找元素的地址
 */
LinkListPtr list_search_pos(LinkListPtr L, int pos)
{
	//判断逻辑
	if(NULL == L || list_empty(L))
	{
		puts("memory error!");
		return NULL;
	}
	if(pos < 0 || pos > L->len)
	{
		puts("pos error!");
		return NULL;
	}

	//定义遍历指针从头结点开始
	LinkListPtr q = L;
    //根据循环次数找到对应位置
	for(int i = 0; i < pos; i++)
	{
		q = q->next;
	}

	//将找到的节点返回
	return q;
}

根据数据查找

/*
 函数功能:链表按数据查找
 函数参数:头结点地址,要查找的数据
 函数返回值:传参异常:-1   成功:0
 */
int list_search_value(LinkListPtr L, datatype value)
{
	//判断逻辑
	if(NULL == L || list_empty(L))
	{
		puts("memory error!");
		return -1;
	}

	//查找逻辑
	int flag = 0;//防止有多个相同数据的情况
	int count = 1;//记录数据存储节点位置
	LinkListPtr q = L->next;
	while(q != NULL)
	{
		if(value == q->data)
		{
			printf("该数据存储于链表的第%d个节点\n", count);
			flag++;
		}
		q = q->next;
		count++;
	
	}
	if(0 == flag)
	{	
		puts("表内没有此数据");
	}
	
	return 0;
}

链表的升序排序

/*
 函数功能:链表的升序排序
 函数参数:头结点地址
 函数返回值:传参异常:-1 成功:0
 */
int list_sort(LinkListPtr L)
{
	//判断逻辑
	if(NULL == L || list_empty(L))
	{
		puts("memory error!");
		return -1;
	}

	//排序逻辑
	LinkListPtr q1 = L->next;//用于遍历链表
	LinkListPtr q2 = NULL;   //用于查找最值
	LinkListPtr pmin = NULL; //用于记录最值
	char temp = 0;

	while(q1 != NULL)
	{
		q2 = q1;
		pmin = q2;
		while(q2 != NULL)//循环查找最值
		{
			if(pmin->data > q2->data)
			{
				pmin = q2;
			}
			q2 = q2->next;
		}
		if(q1 != pmin)  //将最值与第一位交换
		{
			temp = pmin->data;
			pmin->data = q1->data;
			q1->data = temp;
		}
		q1 = q1->next;
	}
	return 0;

}

单链表逆序(递归)

LinkListPtr list_reverse(LinkListPtr L)
{

	//递归出口,找到最后一个节点
	if(L->next == NULL)
	{
		return L;//返回最后一个节点的地址
	}
	//递归调用,将尾节点作为新的头节点保存
	LinkListPtr NL = list_reverse(L->next);
	//指向逆转,原来的后继节点,指针域指向前驱节点,通过遍历链表时L保存的前驱地址
	L->next->next = L;
	//把新指向的尾节点指针域置NULL
	L->next = NULL;
	return NL;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值