/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* rotateLinkedList(ListNode* head, int k) {
// write code here
// 算出节点数量
ListNode* temp = head;
int len = 0;
while(temp)
{
temp = temp->next;
++len;
}
k %= len;
if(k==0 || head==nullptr)
return head;
// 新链表头的前一个
ListNode* t_1 = head;
// 新链表头
ListNode* t_2 = head;
// 原来链表的最后一位
ListNode* t_3 = head;
// 从下标 1 开始
int t = 1;
while(t<len)
{
// 新链表头的前一个
if(t<len-k)
t_1 = t_1->next;
// 新链表头
if(t<=len-k)
t_2 = t_2->next;
// 原来链表的最后一位
t_3 = t_3->next;
++t;
}
// cout << t_1->val << ", " << t_2->val << ", " << t_3->val << endl;
t_1->next = nullptr;
t_3->next = head;
return t_2;
}
};