双指针(快慢指针) 查找链表倒数第k个节点

98 阅读1分钟

题目

给定链表的头节点,获取倒数第k个节点

  • 通过快慢指针,先让快指针走k个,然后慢指针和快指针一起走,当快指针抵达时,慢指针指向的就是倒数第k个节点

function process(head, k) {
  let first = head;
  let second = head;

  // 将first指针向前移动k个节点
  for (let i = 0; i < k; i++) {
    if (first === null) {
      return null; // 链表长度小于k
    }
    first = first.next;
  }

  // 同时移动first和second指针,直到first指针到达链表尾部
  while (first !== null) {
    first = first.next;
    second = second.next;
  }

  // second指针所指向的节点就是倒数第k个节点
  return second;
}