Thursday, December 5, 2024

 CodingExercise: Rotate List

Medium

Topics

Companies

Given the head of a linked list, rotate the list to the right by k places.

Example 1:

Input: head = [1,2,3,4,5], k = 2

Output: [4,5,1,2,3]

Example 2:

Input: head = [0,1,2], k = 4

Output: [2,0,1]

Constraints:

The number of nodes in the list is in the range [0, 500].

-100 <= Node.val <= 100

0 <= k <= 2 * 109

/**

 * Definition for singly-linked list.

 * public class ListNode {

 * int val;

 * ListNode next;

 * ListNode() {}

 * ListNode(int val) { this.val = val; }

 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }

 * }

 */

class Solution {

    public ListNode rotateRight(ListNode head, int k) {

        if (head == null || k == 0) return head;

        Listhead current = head;

        int n = 0;

        while (current){

             n++;

             current = current.next;

        }

        if (k > n) { k = k % n;}

        int offset = n - k;

        current = head;

        if (offset > 0) {

            while (offset > 1) {

                current = current.next;

                offset--;

            }

            ListNode remaining = current.next;

            current.next = null;

            ListHead end = remaning;

            while (end && end.next) {

                end = end.next;

            }

            end.next = head;

            return remaining;

        }

        return head;

    }

}


No comments:

Post a Comment