简述查找链表中倒数第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进行相应的调整。