实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
注意:本题相对原题稍作改动
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:
给定的 k 保证是有效的。
class Solution {
public int kthToLast(ListNode head, int k) {
ListNode cur = head;
int len = 1;
while(cur != null){
cur = cur.next;
len++;//len多加一次,怎么优化啊?
}
cur = head;
int move = len - k -1;
while(move != 0){
cur=cur.next;
move--;
}
return cur.val;
}
}
代码优化:考虑不用遍历,就能够知道哪个是倒数的k节点
快慢指针:方法1:fast先k-1步,在和slow同时走1步,fast.next为空,弹出
方法2:fast先k,在和slow同时走1步,fast为空,弹出
法一实现:
class Solution {
public int kthToLast(ListNode head, int k) {
ListNode fast = head;
ListNode slow = head;
int a = k-1;
while(a != 0){
fast = fast.next;
a--;
}
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
return slow.val;
}
}
在考虑,严谨一点,就是k是否满足逻辑,head是否为空