[LeetCode] 剑指 Offer 22. 链表中倒数第k个节点

75 阅读1分钟

剑指 Offer 22. 链表中倒数第k个节点

解题思路

快慢指针, 因为是寻找倒数第k个节点. 我们通过保证两个指针之间的差值为k. 同时遍历整个列表, 当快指针到达尾部时,慢指针则为倒数第k个节点

代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var getKthFromEnd = function(head, k) {
  let p = head
  let q = head
  let i = 0;
  while(i < k && p) {
    p = p.next
    i++
  }
  if(i < k) return null
  while(p) {
    p = p.next
    q = q.next
  }
  return q;
};