跳到主要内容

简述查找链表中倒数第k个结点 ?

参考答案:

在链表中查找倒数第k个节点,一种常见的方法是使用双指针技术。这种方法的基本思路是创建两个指针,一个指针先向前移动k步,然后两个指针同时向前移动,当先行的指针到达链表尾部时,另一个指针将指向倒数第k个节点。

以下是该算法的Python实现:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

def find_kth_to_tail(head, k):
    if not head or k <= 0:
        return None

    # 创建两个指针,都指向头节点
    fast = head
    slow = head

    # 先让快指针向前移动k步
    for i in range(k):
        if not fast:
            return None  # 如果链表长度小于k,返回None
        fast = fast.next

    # 然后两个指针同时向前移动,直到快指针到达链表尾部
    while fast:
        fast = fast.next
        slow = slow.next

    # 此时慢指针指向倒数第k个节点
    return slow

这个算法的时间复杂度是O(n),其中n是链表的长度。在最坏的情况下,我们需要遍历整个链表。空间复杂度是O(1),因为我们只使用了两个指针,没有使用额外的空间。

注意,这个算法假设了链表的索引从1开始,也就是说链表的头节点是第一个节点。如果你的链表索引从0开始,那么你可能需要对k进行相应的调整。