📅  最后修改于: 2023-12-03 15:41:56.923000             🧑  作者: Mango
逆序打印链表的最后k个节点是一道经典的算法问题。对于一个单向链表,从尾到头输出倒数第k个节点至链表的最后一个节点的值。
这里提供一种迭代方法来解决这个问题。
为了找到链表的倒数第k个节点,需要使用两个指针。
得到倒数第k个节点之后,只需要从该节点开始遍历链表,输出每个节点的值即可。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def print_last_k_nodes(head, k):
if not head or k <= 0:
return None
# 第一个指针先移动k-1步
p1 = head
for i in range(k - 1):
if p1.next:
p1 = p1.next
else:
# k的值大于链表的长度
return None
# 同时移动两个指针
p2 = head
while p1.next:
p1 = p1.next
p2 = p2.next
p = p2
res = []
while p:
res.append(p.val)
p = p.next
return res[::-1]
在实现中,首先判断链表是否为空或k是否小于等于0,如果是则返回空。
接着,第一个指针p1先移动k-1步,如果此时p1.next为空,说明k的值大于链表的长度,返回空。
然后,定义第二个指针p2指向链表的头节点,同时p1和p2向前移动。当p1到达链表的尾节点时,p2对应的节点就是倒数第k个节点。
最后,从p2开始遍历链表,把每个节点的值存储到一个列表中,并使用[::-1]将列表逆序输出。
本文介绍了一种迭代方法来解决逆序打印链表的最后k个节点的问题。这种方法的时间复杂度为O(N),空间复杂度为O(K),比较高效。