📅  最后修改于: 2023-12-03 15:22:54.672000             🧑  作者: Mango
本文介绍如何反转给定链表的前K个元素。具体地,我们将给出一个算法,其时间复杂度为O(n),空间复杂度为O(1)。
我们可以通过三个指针来实现反转操作。具体地,我们需要维护一个指向前一个结点的指针和一个指向当前结点的指针,以及一个指向当前结点之后的结点的指针。我们不断将当前结点指向前一个结点,然后将三个指针都向右移动一位即可。
需要注意的是,当到达第K个元素时,我们需要将其指向后面的元素。同时,当反转结束后,前K个元素的最后一个元素应该指向反转的部分之后的第一个元素。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverse(self, head: ListNode, k: int) -> ListNode:
if not head:
return None
pre, cur = None, head
for i in range(k):
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
head.next = self.reverse(cur, k) # 连接第一部分和第二部分
return pre
我们可以用一个小例子来测试我们的代码。
l1 = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
s = Solution()
ans = s.reverse(l1, 3)
while ans:
print(ans.val, end=" ")
ans = ans.next
输出结果应该为:
3 2 1 4 5
这表明我们的算法可以正确地反转给定链表的前3个元素。