leetcode第1ブラシ_Rotate List
私は何度も提出して、間違いはわけがわからなくて、それからやっと分かってきて、もとは私は問題を理解し間違えました.
この問題の意味は、最後のkつの位置の要素を前に移動させるということではありません.この問題のやり方は、2つのポインタで、まず1つを歩かせ、一定の長さに歩いた後、2つを一緒に歩くことです.簡単です.実際にはチェーンテーブル全体が右に移動することを意味し、1つのチェーンテーブルの長さがNであると仮定すると、右にN回移動すると、チェーンテーブルは元の姿に戻ります.kの取値範囲は非負、すなわちNより大きくてもよいので、実際のシフト回数は(k%N)にすぎない.
コードはあまり言わないで、簡単です.
この問題の意味は、最後のkつの位置の要素を前に移動させるということではありません.この問題のやり方は、2つのポインタで、まず1つを歩かせ、一定の長さに歩いた後、2つを一緒に歩くことです.簡単です.実際にはチェーンテーブル全体が右に移動することを意味し、1つのチェーンテーブルの長さがNであると仮定すると、右にN回移動すると、チェーンテーブルは元の姿に戻ります.kの取値範囲は非負、すなわちNより大きくてもよいので、実際のシフト回数は(k%N)にすぎない.
コードはあまり言わないで、簡単です.
class Solution {
public:
ListNode *rotateRight(ListNode *head, int k) {
if(!head||!head->next||k==0)
return head;
int i=0, len=0;
ListNode *pre=head, *pNode = head, *newHead;
while(pNode){
len++;
pNode = pNode->next;
}
pNode = head;
k %= len;
if(k == 0) return head;
while(inext;
i++;
}
while(pNode->next){
pre = pre->next;
pNode = pNode->next;
}
newHead = pre->next;
pre->next = NULL;
pNode->next = head;
return newHead;
}
};