用一个尽可能高效的算法,查找单向链表(有头结点)中倒数第k个位置上的结点
思路
定义两个指向链表首结点的指针变量,第一个指针变量向后移动k个位置后,第二个指针变量也开始跟着一起向后移动,直到第一个指针变量指向尾结点为止,第二个指针变量指向的位置结点就是倒数第k个结点,此时的时间复杂度为O(n)。
实现步骤及参考代码(C语言)
int LList_FindLK(LList_t *Head, DataType_t data, int k){
// 1.定义两个指向首结点的指针变量
LList_t *Temp1 = Head->next;
LList_t *Temp2 = Head->next;
// 2.定义一个计数器,判定什么时候到第k个位置
int count = 0;
// 3.Temp1从首结点开始遍历
while(Temp1->next != NULL)
{
Temp1 = Temp1->next;
// 4.每移动一次,计数器+1
count++;
// 5.如果计数器的值小于k,说明没有找到第k个位置,返回0
if(count < k)
{
return 0;
}
// 6.如果计数器的值大于等于k,Temp2开始跟着Temp1移动
else
{
Temp2 = Temp2->next;
}
}
// 7.说明Temp1已经指向尾结点,此时Temp2指向的位置即为倒数第k个结点,输出Temp2的data值并返回1
printf("单向链表中倒数第k个位置结点的data值为:%d",Temp2->data);
return 1;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端