leetcode 剑指Offer 22 链表中倒数第k个节点
思路:
双指针法:设两个指针faster slower,因为题目要求返回第k个节点开始的链表,那么只需要在一开始,把faster往右移动k次,假如k=2,那么slower在0位置,faster在2位置,之后让两个指针同时往前走,直到faster走到尽头的时候,slower会比尽头相差2个位置,也就是我们要的倒数第二个节点,最后只需要返回slower就行了。(注意题目说的是最后一个节点算是倒数第一个节点,也就是末节点可以看成null,那么就需要让faster遍历到null的时候停,才能获取到我们想要的slower)
代码如下:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
var getKthFromEnd = function(head, k) {
let slower = head;
let faster = head;
while(faster!=null&&k>0){
faster = faster.next;
k--;
}
while(faster!=null){
faster = faster.next;
slower = slower.next;
}
return slower;
};