[Lintcode]Rotate List回転チェーンテーブル


Given a list, rotate the list to the right by  k  places, where k is non-negative.
Example
Given  1->2->3->4->5  and k =  2 , return  4->5->1->2->3 .
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param head: the List
     * @param k: rotate to the right k places
     * @return: the list after rotation
     */
    public ListNode rotateRight(ListNode head, int k) {
        if(head == null || k == 0) return head;
        
        ListNode tmp = head;
        
        int length = 1;
        while(tmp.next != null) {
            tmp = tmp.next;
            length ++;
        }        
        
        k = k % length;
        int diff = length - k;//  k  head      
        if(diff == 0) return head;

        tmp.next = head;
        ListNode res = null;
        while(diff > 1) {
            head = head.next;
            diff--;
        }
        res = head.next;
        head.next = null;
        return res;
    }
}