难度:简单

    题目描述:
    输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

    示例:

    1. 给定一个链表: 1->2->3->4->5, k = 2.
    2. 返回链表 4->5.

    解题思路:

    1. 遍历链表为链表设置标志位index,并获得链表长度
    2. 返回链表倒数第k个,即返回第i-k+1个
      1. var getKthFromEnd = function(head, k) {
      2. let i = 1;
      3. let newHead = head;
      4. while(head){
      5. head.index = i;
      6. head = head.next;
      7. i++
      8. }
      9. while(newHead && newHead.index !== i-k){
      10. newHead = newHead.next;
      11. }
      12. return newHead
      13. };

    双指针:

    1. 声明一个快指针,一个慢指针,先让快指针走k步,
    2. 遍历快指针知道指向null,此时慢指针就指向倒数第k个
      1. var getKthFromEnd = function(head, k) {
      2. let fast = head;
      3. let slow = head;
      4. while(k > 0){
      5. fast = fast.next;
      6. k--
      7. }
      8. while(fast){
      9. slow= slow.next;
      10. fast = fast.next;
      11. }
      12. return slow;
      13. };