
Sponsored
Sponsored
This approach involves converting the linked list into a circular list and then breaking it at the correct point to achieve the required rotation.
By making the linked list a circular one, you can easily traverse k nodes from the end to set the new head and make necessary detachments.
Time Complexity: O(n) because we pass through the list twice, once to find the length and once to find the new head.
Space Complexity: O(1) since we only use a constant amount of extra space.
1class ListNode:
2 def __init__(self, x):
3 self.val = x
4 self.next = None
5
6class Solution:
7 def rotateRight(self, head: ListNode, k: int) -> ListNode:
8 if not head or k == 0:
9 return head
10 # Compute the length of the list
11 length = 1
12 current = head
13 while current.next:
14 current = current.next
15 length += 1
16 current.next = head # make circular
17 k = k % length
18 # Calculate the position to break at
19 for _ in range(length - k):
20 current = current.next
21 new_head = current.next
22 current.next = None
23 return new_head
24
25# Example usage
26head = ListNode(1)
27head.next = ListNode(2)
28head.next.next = ListNode(3)
29head.next.next.next = ListNode(4)
30head.next.next.next.next = ListNode(5)
31solution = Solution()
32rotated_head = solution.rotateRight(head, 2)
33current = rotated_head
34while current:
35 print(current.val, end=' ')
36 current = current.next
37The Python solution implements the same algorithm. Traverse the list to make it circular by connecting the last node's next pointer to the head. Use the length of the list to handle cases where k is larger than the list length. Break the circle to form the rotated list.
This code also contains a usage example to demonstrate its working.
In this approach, we utilize a two-pointer technique. We advance one pointer ahead by k nodes and then move another pointer from the start concurrently until the first pointer reaches the list's end. This way, the second pointer will eventually land on the node that will become the new tail.
Time Complexity: O(n) because it requires traversal for counting.
Space Complexity: O(1) as no extra space is used.
1class ListNode:
2 def
This Python approach uses the length and circular linking technique alongside the two-pointer method. After calculating the mod value to deal with oversized k, a fast pointer forwards to skip k nodes while the slow pointer eventually lands on the desired new tail.