难度:简单
题目描述:
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
解题思路:
- 遍历链表为链表设置标志位index,并获得链表长度
- 返回链表倒数第k个,即返回第i-k+1个
var getKthFromEnd = function(head, k) {
let i = 1;
let newHead = head;
while(head){
head.index = i;
head = head.next;
i++
}
while(newHead && newHead.index !== i-k){
newHead = newHead.next;
}
return newHead
};
双指针:
- 声明一个快指针,一个慢指针,先让快指针走k步,
- 遍历快指针知道指向null,此时慢指针就指向倒数第k个
var getKthFromEnd = function(head, k) {
let fast = head;
let slow = head;
while(k > 0){
fast = fast.next;
k--
}
while(fast){
slow= slow.next;
fast = fast.next;
}
return slow;
};