Advertisement
i_love_rao_khushboo

143. Reorder List

Oct 5th, 2022
907
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. /**
  2.  * Definition for singly-linked list.
  3.  * struct ListNode {
  4.  *     int val;
  5.  *     ListNode *next;
  6.  *     ListNode() : val(0), next(nullptr) {}
  7.  *     ListNode(int x) : val(x), next(nullptr) {}
  8.  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
  9.  * };
  10.  */
  11. class Solution {
  12. public:
  13.    
  14.     ListNode* find_mid(ListNode* head) {
  15.         if(head == nullptr) return head;
  16.        
  17.         ListNode* fast = head;
  18.         ListNode* slow = head;
  19.        
  20.         while(fast->next and fast->next->next) {
  21.             fast = fast->next->next;
  22.             slow = slow->next;
  23.         }
  24.        
  25.         return slow;
  26.     }
  27.    
  28.     ListNode* reverse(ListNode* head) {
  29.         if(head == nullptr) return head;
  30.        
  31.         ListNode *prv = nullptr, *cur = head, *nxt = head;
  32.        
  33.         while(nxt != nullptr) {
  34.             nxt = nxt->next;
  35.             cur->next = prv;
  36.             prv = cur;
  37.             cur = nxt;
  38.         }
  39.        
  40.         return prv;
  41.     }
  42.    
  43.     void reorderList(ListNode* head) {
  44.         if(head == nullptr) return;
  45.         if(head->next == nullptr) return;
  46.        
  47.         ListNode* mid = find_mid(head);
  48.         ListNode* rhead = reverse(mid->next);
  49.         mid->next = nullptr;
  50.        
  51.         ListNode *itr = head, *ritr = rhead;
  52.         ListNode *tmp = new ListNode();
  53.        
  54.         while(itr or ritr) {
  55.             if(itr) {
  56.                 tmp->next = itr;
  57.                 itr = itr->next;
  58.                 tmp = tmp->next;
  59.             }            
  60.            
  61.             if(ritr) {
  62.                 tmp->next = ritr;
  63.                 ritr = ritr->next;
  64.                 tmp = tmp->next;
  65.             }    
  66.         }
  67.     }
  68. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement