(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. まず求められるチェーンの長さは、k値がチェーンの長さを超えたら、チェーンの長さと型を取ります。
2. 次に、2つのポインタpとqを設定し、まずpをk個のノードに移動させ、その後pとqを同時に移動させる。
3.次はつなぎ合わせです。詳しくは言いません。具体的なコードにはコメントがあります。
具体的なJavaコードは以下の通りです。
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;
}
}