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
.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* The problem is to find the n-th nodes from end of the list.<br>
* Notice that the number n may be greater than the length of the list.<br>
* If this happen, we let n = n % length of the list.<br>
*
* @param head --The head node of the input list
* @param n --An integer.
* @return head of the rotated list.
* @author Averill Zheng
* @version 2014-06-03
* @since JDK 1.7
*/
public ListNode rotateRight(ListNode head, int n) {
ListNode newHead = null;
//calculate the length of the list
if(head != null){
int length = 0;
ListNode currentNode = head;
while(currentNode != null){
++length;
currentNode = currentNode.next;
}
n = (n < length) ? n : n % length;
if(n > 0){
currentNode = head;
ListNode tail = null;
for(int i = 0; i < length - n; ++i){
tail = currentNode;
currentNode = currentNode.next;
}
newHead = currentNode;
while(currentNode.next != null)
currentNode = currentNode.next;
currentNode.next = head;
tail.next = null;
}
else
newHead = head;
}
return newHead;
}
}