knakul853

Untitled

Jul 16th, 2020
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. /**
  2. knakul853
  3.  */
  4. class Solution {
  5. public:
  6.     ListNode* rotateRight(ListNode* head, int k) { // reverse n-k and k then reverse whole list.
  7.        
  8.         if( !head ) return NULL;
  9.         int len = 0;
  10.         ListNode* root = head;
  11.        
  12.         while( root ){
  13.             root = root->next;
  14.             len++;
  15.         }
  16.        
  17.         k = k % len;
  18.        
  19.           k = len - k;
  20.         ListNode* a = head;
  21.        
  22.         int tem = k;
  23.        
  24.         while(k--){
  25.             a = a->next;
  26.         }
  27.        
  28.         auto first = reverseByK(head, tem);
  29.         ListNode* ans = first;
  30.         auto second = reverseByK(a);
  31.         while(first->next)
  32.         {
  33.             first = first->next;
  34.         }
  35.        
  36.         first->next = second;
  37.        
  38.        return reverseByK(ans);
  39.            
  40.     }
  41.    
  42.     ListNode* reverseByK(ListNode* root, int k=INT_MAX )
  43.     {
  44.         if(!root) return NULL;
  45.        
  46.         ListNode* pre = NULL;
  47.        
  48.         while( k && root )
  49.         {
  50.            ListNode* save =  root->next;
  51.             root->next= pre;
  52.             pre = root;
  53.             root = save;
  54.             k--;
  55.         }
  56.        
  57.         return pre;
  58.     }
  59. };
Add Comment
Please, Sign In to add comment