2021.11.28算法笔记
剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
即输入[1,2,3,4,5] 2,输出[4,5]
自己思路:
是一个数组截取的思路
将输入的数组,倒数K个放入另一个数组即可;或者将前面K-1个删除即可;
代码如下;
/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
var getKthFromEnd = function(head, k) {
let length = head.length
var array = []
let i=k
for(i=k;i--;i>0){
array.push(head[length-i])
}
return array
};
//出错!typeerror!
因为head是ListNode,不是数组,不能使用push方法来追加新的元素。
解题思路:
n可以理解为快指针和慢指针的间隔
当快指针走到最后,则慢指针就是走到倒数第k个节点
代码:
var getKthFromEnd = 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
};
补充:NodeList对象
是DOM操作取出的集合(实际上是基于DOM结构动态查询的结果),用来保存一组有序的节点,可以通过位置来访问这些节点,它并不是array的实例。
Nodelist最大的特点就是它的时效性,DOM结构的变化能自动反映在Node List对象中。也就是说当DOM结构发生变化时,NodeList立刻会发生变化。
网友评论