剑指offer-链表中倒数第k个节点

Posted by franki on April 25, 2021

链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个节点。

思路

双指针

1 第一个指针先走k步

2 第二个指针从头结点开始走,第一个指针同步走

3 当第一个指针走到结尾时

4 返回当前第二个指针指向的位置

代码

function getKthFromEnd(head, k) {
    if (head === null || k === 0) {
        return null;
    }
    let paHead = head;
    let pbHead = head;

    let index = 0;
    while (index++ < k) {
        if (paHead === null) {
            return null;
        }
        paHead = paHead.next;
    }

    while (paHead) {
        paHead = paHead.next;
        pbHead = pbHead.next;
    }

    return pbHead;
}

复杂度分析

  • 时间复杂度: O(N)
  • 空间复杂度: O(1)