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.

/**
 * 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;
    }
}

  

posted @ 2014-06-05 02:53  Averill Zheng  阅读(169)  评论(0编辑  收藏  举报