(Leetcode 61)Rotate List


タイトル:Rotate List
Given a list、rotate the list to the right by k place,where k is non-negative.
For example:Given  1->2->3->4->5->NULL and k =  2、リセット  4->5->1->2->3->NULL.解題の考え方:
1. まず求められるチェーンの長さは、k値がチェーンの長さを超えたら、チェーンの長さと型を取ります。
2. 次に、2つのポインタpとqを設定し、まずpをk個のノードに移動させ、その後pとqを同時に移動させる。
3.次はつなぎ合わせです。詳しくは言いません。具体的なコードにはコメントがあります。
具体的なJavaコードは以下の通りです。
public class Solution {
    public static ListNode rotateRight(ListNode head, int k) {
        if( k <= 0 || head == null ){
            return head;
        }
        ListNode p = head;  
        int len = 0;
        while( p != null ){
            if( p.next == null ){
                pre = p;
            }
            p = p.next;
            len++;
        }
        //  k      ,  
        k = k % len; 
        p = head;
        for( int i =1; i <= k; ++i ){
            p = p.next;
        }
        /********************
		          p        
		q     k+1   ,    1 2 3 4 5 ,k = 2 
		     p = 5, q = 3
		*/
        ListNode q = head;
        while( p.next != null ){
            q = q.next;
            p = p.next;
        }
		//        head  ,             null
		//    head    
        p.next = head;
        head = q.next;
        q.next = null;
        
        return head;
    }
}