Given the head of a linked list, reverse the nodes of the list k at a time, and return the 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.
You may not alter the values in the list's nodes, only nodes themselves 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]
Constraints:
- The number of nodes in the list is
n. 1 <= k <= n <= 50000 <= Node.val <= 1000
My Solution:
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution(object): def reverseKGroup(self, head, k): """ :type head: Optional[ListNode] :type k: int :rtype: Optional[ListNode] """ if k == 1: return head def reverseBetween(head, left, right): if left == right or head.next is None: return head dummy = ListNode() dummy.next = head prev = dummy # Move prev to one node before the left-th node for _ in range(left - 1): prev = prev.next # Reverse the sublist from left to right curr = prev.next next_node = None for _ in range(right - left): next_node = curr.next curr.next = next_node.next next_node.next = prev.next prev.next = next_node return dummy.next node = head i = 1 while node: next_node = node.next if node.next else None if i % k == 0: head = reverseBetween(head, i - k + 1, i) node = next_node i += 1 return head


浙公网安备 33010602011771号