原题链接:61. 旋转链表
solution:
① 统计链表中的节点数量cnt
② 向右移动k个节点,相当于把前cnt - k个节点依次插入到尾部
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(head == nullptr) return head;
int cnt = 0; //统计链表中节点数量
ListNode *dummy = new ListNode(-1); //虚拟头节点
ListNode *cur = dummy;
dummy->next = head;
while(cur->next != nullptr) { //最后cur位于最后一个节点
cur = cur->next;
cnt++;
}
ListNode *tail = cur; //tail指向最后一个节点
k %= cnt;
k = cnt - k;
for(int i = 0;i < k;i++) { //循环k次
tail->next = dummy->next;
dummy->next = dummy->next->next;
tail = tail->next;
tail->next = nullptr;
}
return dummy->next;
}
};


