我的思路
数组做多了,首先宪想到的就是数组啦。链表中的数据放入数组中。然后直接给出需要的值即可。
代码
var kthToLast = function(head, k) {
let arr = []
let cur = head
while(cur){
arr.push(cur.val)
cur = cur.next
}
return arr[arr.length - k]
};
后来又想了想,能不能不使用数组。
var kthToLast = function(head, k) {
let length = 0
let cur = head
while(cur){
length++
cur = cur.next
}
cur = head
while(length-k>0){
cur = cur.next
length--
}
return cur.val
};
双指针
定义两个指针,当快指针走的时候,计数n++, 直到快慢指针之间的偏移量达到了k,慢指针开始移动。当快指针遍历完的同时,慢指针刚好就是倒数k个值。
var kthToLast = function (head, k) {
let fast = head
let low = head
let n = 0
while (fast) {
fast = fast.next
if (n >= k) {
low = low.next
}
n++
}
return low.val
};