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.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* rotateRight(struct ListNode* head, int k) {
struct ListNode* L;
int l=0,n;
if(!head || !k) return head;
L=head;
while(L->next)
{
L=L->next;
l++;
}
l=l+1;
k=k%l;
L->next=head;
n=l-k-1;
while(n--)
{
head=head->next;
}
L=head->next;
head->next=NULL;
return L;
}
先循环链表,再找合适的位置断开。
参考:
[leetcode] Rotate List | 把后k个rotate到list前面去,k可以超过list本身长度