单向链表倒第 k 个节点
给到一个单向链表,要求找出该链表中倒数第 k 个节点,要求只能遍历一次链表,且空间复杂度为 O(1)
题解
要在单向链表中找到倒数第 个节点,且要求 只能遍历一次链表 和 空间复杂度为 ,最经典的解法是使用 双指针法(快慢指针)。
算法思路
- 定义两个指针:
fast(快指针)和slow(慢指针),初始都指向链表的头节点head。 - 先让
fast指针向前移动 步。 - 此时
fast和slow之间相隔了 个节点。 - 接着,让
fast和slow同时每次向后移动一步,直到fast指向null(即到达链表末尾)。 - 因为两者的距离始终保持不变,当
fast走到链表尽头时,slow刚好停留在倒数第 个节点上。

