题解 | #旋转链表#
旋转链表
https://www.nowcoder.com/practice/1ad00d19a5fa4b8dae65610af8bdb0ed
/** * 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; } };