リンクリストのヘッドノードを指定し、リンクリスト head
を回転して、リンクリストの各ノードをk
1つ右に移動し ます。
例1:
入力: head = [1,2,3,4,5]、k = 2
出力: [4,5,1,2,3]
例2:
入力:ヘッド= [0,1,2]、k = 4
出力: [2,0,1]
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head==NULL||k==0)
{
return head;
}
//1、计数节点,并把链表形成一个环
int sum = 1;
ListNode* temp = head;
while(temp->next!=NULL)
{
sum++;
temp=temp->next;
}
temp->next = head;
//2、从原始的头结点开始计数,找到k-1位置时,断链
int count = 0;
k = k % sum;
while(count < sum - k-1)
{
head = head->next;
count++;
}
ListNode* newHead = head->next;
head->next = NULL;
return newHead;
}
};