Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- knakul853
- */
- class Solution {
- public:
- ListNode* rotateRight(ListNode* head, int k) { // reverse n-k and k then reverse whole list.
- if( !head ) return NULL;
- int len = 0;
- ListNode* root = head;
- while( root ){
- root = root->next;
- len++;
- }
- k = k % len;
- k = len - k;
- ListNode* a = head;
- int tem = k;
- while(k--){
- a = a->next;
- }
- auto first = reverseByK(head, tem);
- ListNode* ans = first;
- auto second = reverseByK(a);
- while(first->next)
- {
- first = first->next;
- }
- first->next = second;
- return reverseByK(ans);
- }
- ListNode* reverseByK(ListNode* root, int k=INT_MAX )
- {
- if(!root) return NULL;
- ListNode* pre = NULL;
- while( k && root )
- {
- ListNode* save = root->next;
- root->next= pre;
- pre = root;
- root = save;
- k--;
- }
- return pre;
- }
- };
Add Comment
Please, Sign In to add comment