首页 > 其他分享 >查找链表倒数第k个数位置上的结点

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

时间:2024-04-26 20:35:14浏览次数:20  
标签:结点 Head cnt 链表 cnt2 倒数第

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
* 	函数作者:  [email protected]
*	创建日期:   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

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

麻烦三连加关注!!!!

比心

标签:结点,Head,cnt,链表,cnt2,倒数第
From: https://www.cnblogs.com/zkbklink/p/18160800

相关文章

  • 单链表的头插法的实现
    /***@filename: 文件名称*@brief单链表的头插法的实现*@[email protected]*@date2024/04/26*@version1.0:版本*@property:属性介绍*@note补充注意说明*CopyRight(c)[email protected]*/#......
  • 数据结构—单链表队列头删尾插
    单链表队列的头删尾插/*************************************************/***@filename: 单链表队列的头删尾插.md*@brief实现对单链表队列的头删尾插*@[email protected]*@date2024/04/26*@version1.0:在下坂本,有何贵干*@property:no......
  • 数据结构-链表-2
    本函数功能为将查找单链表中的倒数第k个结点将其data输出<!--RevCount.c文件(查找单链表中的倒数第k个结点将其data输出)的实现-->/*******************************************************************************funcname:LinList_RevCount*function:......
  • 双向循环链表队列的接口设计
    /***********************************************************************************************************该程序实现循环队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以循环队列中元素*的数据类型为DataType_t,用户可以根据实际情况......
  • TODO-力扣-707. 设计链表
    1.题目题目地址(707.设计链表-力扣(LeetCode))https://leetcode.cn/problems/design-linked-list/题目描述你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果......
  • 双向循环链表的删除、插入
    双向循环链表双向循环链表是一种特殊的链表结构,它结合了双向链表和循环链表的特点。在双向循环链表中,每个节点都有两个指针,一个指向前一个节点,另一个指向后一个节点,从而形成双向链接。同时,链表的头节点和尾节点相互链接,形成一个循环结构。这种结构使得双向循环链表在遍历和操作......
  • 双向循环链表的插入处理函数接口
    //方便访问,创建一个带头结点的双向循环链表//链表数据域取别名方便修改typedefintDataType_t;//构造双向循环链表的结点typedefstructDoubleCircularLList{DataType_tdata;//数据域structDoublLingkedList*prev;//直接前驱指针域......
  • 单向循环链表实现头插、尾插、中间插、头删、尾删、中间删
    *name:单向循环链表*author:[email protected]*data:2024/04/23*function:设计一个单向循环链表,实现头插、尾插、中间插、头删、尾删、中间删*noto:None**CopyRight(c)[email protected]******......
  • 以链表作为基础实现栈空间(链式栈)
    数据结构以链表作为基础实现栈空间(链式栈)/****************************************************************************************************************** * filename : LinkedStack.c* author : [email protected]* data : 2024/04/25* function : 链式栈......
  • 单链表的头插、尾插、中间插、头删、尾删、中间删
    //指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的typedefstructLinkedList{ DataType_t data;//结点的数据域 structLinkedList *next;//结点的指针域}LList_t;......