与数组旋转那题不同,链表旋转可以更简单地实现。
ListNode* rotateRight(ListNode* head, int k)
{
if (head == nullptr || head->next == nullptr || k == 0)
return head;
int len = 0;
ListNode* p = head, *temp = nullptr;
while (p)
{
len++;
p = p->next;
}
k %= len;
if (k == 0)
return head;
k = len - k;
p = head;
while (k--)
{
if (k == 0)
temp = p;
p = p->next;
if (k == 0)
temp->next = nullptr;
}
ListNode* res = p;
while (p->next)
p = p->next;
p->next = head;
return res;
}