题目
思路
每个节点向右移动k个位置,其实就是从头开始遍历,将n-k个节点顺序插入到链表的尾部。
如上图所示的示例1,先将1插入到5的后面,再将2插入到1的后面,最后将3插入到2的后面即可。
代码详解
定义一个cur变量用来遍历到最后一个节点,方便后面的插入,a为移动节点的个数,iter变量从头开始遍历,将每个节点不断地往后插入。插入完毕后,将最后一个节点的next指向空即可。
iter即为新链表的头结点
代码
class Solution {
public:ListNode* rotateRight(ListNode* head, int k) {if(head==nullptr || head->next==nullptr)return head;ListNode* cur = head;int n = 1;while(cur->next){n++;cur = cur->next;} int a = n - k%n;ListNode* iter = head;while(a--){cur->next = iter;cur = iter;iter = iter->next; }cur->next = nullptr;return iter;}
};