Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
注意: 本题相对原题稍作改动
示例
示例1:
输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:
给定的 k 保证是有效的。
二、思路分析
翻转链表
将链表翻转以后,返回翻转后的第k个节点即可;
快慢指针
定义一个快指针fast 和慢指针slow,初始他们都指向头head;
快指针先走k步, 然后让快慢指针一起向后走,直到fast走过为节点(为null),这是slow指向节点就是倒数第k个节点
三、JavaScript代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {number}
*/
var kthToLast = function(head, k) {
// 翻转链表
// let cur = head, pre = null,count = 1;
// while(cur) {
// let next = cur.next;
// cur.next = pre;
// pre = cur;
// cur = next;
// }
// while(pre) {
// if(count == k) {
// return pre.val
// }
// pre = pre.next
// count ++
// }
//快慢指针
let [fast ,slow] = [head, head];
// 快指针先走k步
while(k --) {
fast = fast.next
}
while(fast) {
fast = fast.next;
slow = slow.next;
}
return slow.val
};