实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
分析: 找出单向链表中倒数某个节点,首先想到最简单也是最暴力的解法:生成一个数组,将链表遍历的同时,存放到数组中,将数组反转,取第K个元素值。
但是这样做会开辟一个新的数组,从而产生和消耗不必要的内存。另一种想法就是:将链表反转,再找到第K个元素即可
下面分别实现:
方法一:
var kthToLast = function(head, k) {
let indexList = []
let p = head
while(p) {
indexList.push(p.val)
p = p.next
}
return indexList[indexList.length - k]
};
方法二:
var kthToLast = function(head, k) {
let pre = null
let current = head
while(current) {
const next = current.next
current.next = pre
pre = current
current = next
}
let n = 1
let res = ''
while(n <= k) {
res = pre.val
n++
pre = pre.next
}
return res
}
实现过程和原理可见前面的文章: JS实现链表的反转