πŸš€Day 2. Rotate a linked list 🧠

The problem can be found at the following link: Problem Link

πŸ’‘ Problem Description:

You are given the head of a singly linked list and an integer k. Your task is to left-rotate the linked list k times.

πŸ” Example Walkthrough:

Input: head = 10 -> 20 -> 30 -> 40 -> 50, k = 4 Output: 50 -> 10 -> 20 -> 30 -> 40 Explanation: Rotate 1: 20 -> 30 -> 40 -> 50 -> 10 Rotate 2: 30 -> 40 -> 50 -> 10 -> 20 Rotate 3: 40 -> 50 -> 10 -> 20 -> 30 Rotate 4: 50 -> 10 -> 20 -> 30 -> 40

Input: head = 10 -> 20 -> 30 -> 40, k = 6 Output: 30 -> 40 -> 10 -> 20 Explanation: Since k = 6 exceeds the length of the list (4), k is reduced to k % length = 2. After two left rotations: 10 -> 20 -> 30 -> 40 β†’ 20 -> 30 -> 40 -> 10 β†’ 30 -> 40 -> 10 -> 20.

Constraints:

  • $1 <= number of nodes <= 10^5$

  • $0 <= k <= 10^9$

  • $0 <= data of node <= 10^9$

🎯 My Approach:

  1. Key Observations:

    • If k is greater than the length of the list, we only need to perform k % length rotations, as rotating the list length times results in the same list.

    • Breaking the linked list into two parts and re-linking the tail to the head helps achieve the rotation efficiently.

  2. Algorithm:

    • Compute the length of the list (len).

    • Reduce k to k % len to handle large values of k.

    • If k = 0, return the original list as no rotation is required.

    • Traverse the list to find the new tail (the node at position len - k) and the new head (the node at position len - k + 1).

    • Break the list into two parts by setting the next pointer of the new tail to nullptr.

    • Re-link the old tail to the original head.

    • Return the new head.

πŸ•’ Time and Auxiliary Space Complexity

  • Expected Time Complexity: O(n), where n is the length of the linked list. This is because we traverse the list twice: once to calculate its length and once to locate the new head and tail.

  • Expected Auxiliary Space Complexity: O(1), as no additional space is used apart from a few pointers.

πŸ“ Solution Code

Code (C++)

πŸ‘¨β€πŸ’» Alternative Approach

Alternative Approach: Optimized Left Rotation

The idea is similar but involves fewer intermediate calculations. We aim to find the breaking point in one traversal. Here's the implementation:

Code (Java)

Code (Python)

🎯 Contribution and Support:

For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Let’s make this learning journey more collaborative!

⭐ If you find this helpful, please give this repository a star! ⭐


πŸ“Visitor Count

Last updated