Leetcode #61. Rotate List循環変位チェーンテーブル解題レポート


1問題を解く思想
タイトルの意味は、チェーンテーブルがあれば、右にKステップを移動させ、新しい冒頭のチェーンテーブルを得ることができます.例は原題の例を見ることができます.
まず、右に移動するKステップは、チェーンテーブルの長さNよりも大きい可能性があることを理解しておく必要があります.
1.チェーンテーブルを1回遍歴してチェーンテーブル長Nを得、チェーンテーブルの尾を頭ノードに接続する.2、headからn-k%n歩を歩く位置から新しいチェーンテーブルに切ります.それは移動後の額の結果です.3、切った位置を新しい頭の結び目として返します.切った位置の尻尾をnullに設定するのを忘れないでください.
2原題
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.
3 AC解
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
public class Solution {
    /** *        ,     head   n-k%n               ,           */
    public ListNode rotateRight(ListNode head, int k) {
        if(head==null)
            return null;
        //       
        ListNode p=head;
        int n=1;
        while(p.next !=null){
            n++;
            p=p.next;
        }
        p.next=head;
        //      ,   
        k=n-k%n;
        p=head;
        while(k-->1){
            p=p.next;
        }
        head=p.next;
        p.next=null;
        p=head;
        return head;
    }
}