找出断开位置,把链表首尾相连,断开环后返回新的头结点即可
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head == nullptr || head->next == nullptr)
return head;
ListNode *ptr = head;
int len = 0;
while(ptr != nullptr)
{
len++;
ptr = ptr->next;
}
k = k % len;
if(k == 0)return head;
ListNode *slow = head, *fast = head;
for(int i = 0;i < k + 1;i++)
{
fast = fast->next;
}
while(fast != nullptr)
{
fast = fast->next;
slow = slow->next;
}
ListNode *newhead = slow->next;
ListNode *tmp = head;
while(tmp->next != nullptr) tmp = tmp->next;
tmp->next = head;
slow->next = nullptr;
return newhead;
}
};