「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」
LeetCode剑指 Offer 22.链表中倒数第k个节点
题目要求
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。
示例
给定一个链表: 1->2->3->4->5, 和 k = 2. 返回链表 4->5.
思路
还是使用双指针,快指针先移动k步(同时要保证移动k步的时候快指针一直是一个有效的值),然后快慢指针同时移动,快指针为null的时候,此时的慢指针就是题目要求的倒数第K个节点
1. 声明快慢指针,快指针移动k步并且保证快指针是个有效值
let slow = head
let fast = head
for (let i=0
if (fast == null) return false
fast = fast.next
}
2.快慢指针同时移动,快指针为null的时候慢指针的值就是题目要求的内容
while (fast != null) {
slow = slow.next
fast = fast.next
}
return slow
完整代码
var getKthFromEnd = function(head, k) {
let slow = head
let fast = head
for (let i=0
if (fast == null) return fast
fast = fast.next
} while (fast != null) {
slow = slow.next
fast = fast.next
}
return slow
}