题目
-
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题+ 从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。
示例: -
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof
解题思路
简单点就是 取从右往左数第k个节点
如果这道题变一下 取正向第k个节点 就是有个计数君count、每次取下一个、当
计数君等于k 停下
加一个思路倒叙 链表不是数组没法倒序但是我们可以取总长度-k个就是倒数第k个了
怎么取总长度,一个指针从头走到尾就是总长度 - k不就是我们要的东西了吗
所以 两个指针 一个走完整个链表也就是总长度,另一个比总长度少走k个
代码
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
// 慢k个走
ListNode slow = head;
// 总长度
ListNode quick = head;
int dValue = 1;
// 总长度 的先走
while (dValue < k) {
quick = quick.next;
dValue ++;
}
// 先走的走完 k个 大家一起走
while(quick.next != null) {
quick = quick.next;
slow = slow.next;
}
return slow;
}
}
代码不是最终代码 但是是按着解题思路顺下来的