FazeelUsmani / Amazon-SDE-Preparation

This repository includes all the interview preparation questions for Amazon SDE role
https://practice.geeksforgeeks.org/batch/Amazon-Test-Series
1.15k stars 295 forks source link

07 Linked List --> 5. Rotate a Linked List #84

Open FazeelUsmani opened 3 years ago

FazeelUsmani commented 3 years ago

Given a singly linked list of size N. The task is to rotate the linked list counter-clockwise by k nodes, where k is a given positive integer smaller than or equal to length of the linked list.

Example 1:

Input: N = 5 value[] = {2, 4, 7, 8, 9} k = 3 Output: 8 9 2 4 7 Explanation: Rotate 1: 4 -> 7 -> 8 -> 9 -> 2 Rotate 2: 7 -> 8 -> 9 -> 2 -> 4 Rotate 3: 8 -> 9 -> 2 -> 4 -> 7 Example 2:

Input: N = 8 value[] = {1, 2, 3, 4, 5, 6, 7, 8} k = 4 Output: 5 6 7 8 1 2 3 4

Your Task: You don't need to read input or print anything. Your task is to complete the function rotate() which takes a head reference as the first argument and k as the second argument, and returns the head of the rotated linked list.

Expected Time Complexity: O(N). Expected Auxiliary Space: O(1).

Constraints: 1 <= N <= 103 1 <= k <= N

PracticalMetal commented 3 years ago

Hi, I would like to work on this, Can you suggest me ways to get started?

lcpz commented 3 years ago

The explanation may trick you into thinking that you need to do k rotations, while in reality you just need to split the list in two pieces and swap them. Note that the splitting element is in position n - k if k is even, and n - k - 1 otherwise. Check #97