查找链表倒数第k个数位置上的结点

image

(1)描述算法的基本思想

由题可知,该链表是个单向链表,如果要找到倒数第k个值,我们必须找到该链表的尾部,而单向链表从尾部向头部找倒数第k个值比较麻烦,所以我们可以从头部去找倒数第k个值

(2)描述算法的详细实现步骤

我们可以利用两个指针去遍历该链表,一个指针遍历完该链表计算出结点个数为cnt,一个指针从头部遍历去找倒数个结点数为cnt2

我们可以得出 cnt2=(cnt-k)+1

(3)根据设计思想和实现步骤,采用程序设计语言描述该算法(c语言)

/*******************************************************************
*
*	函数名称:	 Findcount_link
*	函数功能:	寻找链表倒数第k个结点
* 	函数参数:
*  				@a :LList_t *Head  头结点 
*  				@b :int k          倒数的值
*   返回结果:   
* 	注意事项:   None
* 	函数作者:  m17872844806@163.com
*	创建日期:   2024/04/26
*	修改历史:
*	函数版本:	V1.0
* *****************************************************************/
bool Findcount_link(LList_t *Head,int k)
{
	LList_t *Phead=Head;
	int cnt=0;
	int cnt2=0;
 while(Phead->next)
 {
	Phead=Phead->next;
	cnt++;//计算链表总结点数
 }
if(k>cnt)//输入倒数的数值大于链表本身的长度
{
	printf("input err");
	return false;
}
while(Head->next)
 {
	Head=Head->next;
	cnt2++;
	if(cnt2==(cnt-k)+1)
	{
		break;
	}
 }
 printf("data = %d\n",Head->data);
 return true;
}

运行该程序前我们先遍历看看链表本身的数值
image

利用该函数接口后,运行该程序可以看到,我们找的第k倒数是,倒数第4个数是50,该程序运行正常功能实现
image

如果该函数接口代码有什么问题,请将问题发至网易邮箱 m17872844806@163.com,作者将及时改正,欢迎与各位老爷交流讨论。

麻烦三连加关注!!!!

比心

posted @   琨为玉也  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示