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
.
思考:先首尾連成環,head前進(len-k%len)步,拆環。
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *rotateRight(ListNode *head, int k) {if(head==NULL||k==0) return head;ListNode *p=head;int len=1;while(p->next){len++;p=p->next;}p->next=head;k%=len;int step=len-k;while(step--){p=p->next;}head=p->next;p->next=NULL;return head;}
};
leetcode并查集。
?