Cyclic right shift
Given a linked list, implement a cyclic right action on it.
Solution
- For a cyclic right shift the last node of the list must be disconnected and re-attached to the start of the linked list
- Traverse to the last node, keeping track of the last but one node as well
- Make the last but one node the last node of the list, attach the last node to the head of the list and return the new head
Code
def cyclic_right_shift
if @head.next.nil?
return
end
prev = @head
curr = @head.next
while curr.next
prev = curr
curr = curr.next
end
prev.next = nil
curr.next = @head
@head = curr
end
Time complexity
O(n) since we traversed the list only once during the cyclic right shift operation
Variation
Take in a number x and implement cyclic right shift action x times