Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.
思路:找到分割的位置
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if (!head) return head;
ListNode *loop = head;
ListNode *l = head;
ListNode *r = head;
int len = 0;
while (loop->next){ //记录链表长度,并将loop定位到最后一个节点
len++;
loop = loop->next;
}
len++;
int n = len - k%len;
if (n == len || n == 0) return head;
while (n-1){
l = l->next;
n--;
}
r = l->next;
l->next = nullptr;
loop->next = head;
return r;
}
};