02.02. 返回倒数第 k 个节点
02.02. 返回倒数第 k 个节点
1、题目
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
-
示例
输入: 1->2->3->4->5 和 k = 2
输出: 4
2、初步作答
2.1 思路(错误)
- 链表选取倒数第几个节点,需要先把整个链表数据读取出来
- 从读取的数据选择所需的数据
2.2 做法(错误)
- 创建一个collection集合用以存储数据(collection集合按存储顺序存放)
- 根据集合读取数据
2.3 思考(错误思路的反思)
- 最终写代码时,突然发现现实和理想的差距巨明显
- 错误代码
public int kthToLast(ListNode head, int k) {
//题目给出k有效,所以不需要判断比较head是否为空和k值是否大于链表长度
int length = 0;
ListNode a = head;
if(a.next != null){
length++;
a = a.next;
}
int b = 0;
for (int i = 0; i <= length-k; i++) {
b = a.val;
a = a.next;
}
return b;
}
3、二次思考
3.1 思路
- 可以使用两个指针(Fast,Slow)进行判断
- Fast指针首先遍历 K 步(由于题目给出 K 值有效的定义,所以不需要对 K 进行判断);
- Fast向下遍历,Slow跟Fast指针同步遍历,直到Fast为空;
3.2 代码
public int kthToLast(ListNode head, int k) {
ListNode fast=head,slow=head;
while(k != 0){
fast = fast.next;
k--;
}
while(fast==null){
fast = fast.next;
slow = slow.next;
}
return slow.val;
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.2 MB, 在所有 Java 提交中击败了20.41%的用户
通过测试用例:208 / 208
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)