题目:
代码(首刷自解 2024年4月10日):
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if (!head) return nullptr;
// 获得最后一个节点
int count = 1;
ListNode* last = head;
while(last->next) {
last = last->next;
count++;
}
k = k % count;
if (k == 0) return head;
// 获得倒数第k个节点的上一个节点pivot
ListNode* cur = head;
ListNode* pivot = head;
while (cur != last) {
cur = cur->next;
if (k > 0) k--;
else pivot = pivot->next;
}
// pivot断开next,最后一个节点指向头节点
last->next = head;
ListNode* newHead = pivot->next;
pivot->next = nullptr;
// 返回pivot->next
return newHead;
}
};