本文共 1684 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要对链表的节点进行分组反转。每组包含k个节点,剩余的节点保持原序。我们将使用递归的方法来处理这个问题,并且确保算法的时间复杂度为O(n),空间复杂度为O(1)。
class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: def reverseKGroup(self, head: ListNode, k: int) -> ListNode: if not head or not head.next: return head length = 0 current = head while current: length += 1 current = current.next if length < k: return head num_groups = length // k return self.reverse_k_group(head, k, num_groups) def reverse_k_group(self, head: ListNode, k: int, groups_left: int) -> ListNode: if groups_left == 0: return head current = head for _ in range(k): current = current.next prev = None next_node = current for _ in range(k, 0, -1): next_node = next_node.next next_node.next = prev prev = next_node remaining_head = next_node.next remaining = self.reverse_k_group(remaining_head, k, groups_left - 1) prev.next = remaining return head
这种方法确保了每组节点的反转,并在递归中处理剩余的节点,保证了算法的高效性和正确性。
转载地址:http://zhqyz.baihongyu.com/