难度:简单
题目描述:
输入一个链表,输出该链表中倒数第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;};
