Leetcode Tag Search | Back

25. Reverse Nodes in k-Group

Category: /leetcode
Leetcode Link Linked list template

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes, in the end, should remain as it is.

Follow up:

Could you solve the problem in O(1) extra memory space? You may not alter the values in the list’s nodes, only nodes itself may be changed.

Example 1:
Input: head = [1,2,3,4,5], k = 2
Output: [2,1,4,3,5]

Example 2:
Input: head = [1,2,3,4,5], k = 3
Output: [3,2,1,4,5]

Example 3:
Input: head = [1,2,3,4,5], k = 1
Output: [1,2,3,4,5]

Example 4:
Input: head = [1], k = 1
Output: [1]

Solution:

  • Recursion: T: O(N), S: O(N)
def reverseKGroup(self, head: ListNode, k: int):
  if not head: return None

  def reverseN(a, b):
    prev, curr = None, a
    while curr != b:
      next = curr.next
      curr.next = prev
      prev = curr
      curr = next
    return prev

  a, b = head, head
  for i in range(k):
    if not b: return head  # not enough k
    b = b.next

  new_head = reverse(a, b)
  a.next = reverseKGroup(b, k)
  return new_head

讨论

提示

  • 如果看不到讨论部分, 请暂时关掉adblock in Firefox/Chrome
  • 本网站使用Javascript实现评论功能, 此处外链对提高您的网站PR没有帮助. (潜台词: 请不要灌水, 谢谢)