Monday, January 20, 2014

Leetcode: Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL

Solution

First, we clarify that k can be larger than the number of elements in the list, so we have to take this into account.
We use two pointers that are separated by k elements.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode rotateRight(ListNode head, int n) {
        if(head == null)
            return null;
        ListNode newLast;
        ListNode temp = head;
        for(int i=0; i<n; i++)
        {
            if(temp.next == null)
                temp = head;
            else
                temp = temp.next;
        }
        newLast = head;
        while(temp.next!=null)
        {
            newLast = newLast.next;
            temp= temp.next;
        }
        temp.next = head;
        ListNode newHeader = newLast.next;
        newLast.next =null;
        return newHeader;
    }
}

No comments :

Post a Comment