• 先让fast领先k步。倒数第k节点 - 图1
    • 逐步向后移动

      1. class ListNode {
      2. val: number;
      3. next: ListNode | null;
      4. constructor(val?: number, next?: ListNode | null) {
      5. this.val = val === undefined ? 0 : val;
      6. this.next = next === undefined ? null : next;
      7. }
      8. }
      9. function getKthFromEnd(head: ListNode | null, k: number): ListNode | null {
      10. let slow = head;
      11. let fast = head;
      12. // fast - slow = k
      13. for (let i = 0; i < k; i++) {
      14. if (fast === null) {
      15. return null;
      16. }
      17. fast = fast.next;
      18. }
      19. while (fast) {
      20. slow = slow!.next;
      21. fast = fast.next;
      22. }
      23. return slow;
      24. }