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解
タイトルの意味は、チェーンテーブルがあれば、右に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;
}
}