原题链接
Note:
先给K对链表长度取个余数,然后我们只需要把倒数第K个节点后面的移到链表前面就可以了
这道题就变成了找倒数第k个节点,用快慢指针就可以了,先让快的走K个然后在一起走,走到最后就找到了倒数第K个节点
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head) return head;
ListNode *l = head, *r = head;
int len = 1;
while(l -> next){
len ++;
l = l -> next;
}
l = head, k = k % len;
while(k --)
r = r -> next;
while(r -> next)
l = l -> next, r = r -> next;
r -> next = head;
head = l -> next;
l -> next = NULL;
return head;
}
};