(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;
}
运行该程序前我们先遍历看看链表本身的数值
利用该函数接口后,运行该程序可以看到,我们找的第k倒数是,倒数第4个数是50,该程序运行正常功能实现
如果该函数接口代码有什么问题,请将问题发至网易邮箱 [email protected],作者将及时改正,欢迎与各位老爷交流讨论。
麻烦三连加关注!!!!
比心
标签:结点,Head,cnt,链表,cnt2,倒数第 From: https://www.cnblogs.com/zkbklink/p/18160800