Advertisement
i_love_rao_khushboo

Untitled

Jan 7th, 2023
1,032
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. // https://leetcode.com/problems/copy-list-with-random-pointer/description/
  2.  
  3. /*
  4. // Definition for a Node.
  5. class Node {
  6. public:
  7.     int val;
  8.     Node* next;
  9.     Node* random;
  10.    
  11.     Node(int _val) {
  12.         val = _val;
  13.         next = NULL;
  14.         random = NULL;
  15.     }
  16. };
  17. */
  18.  
  19. class Solution {
  20. public:
  21.     Node* copyRandomList(Node* head) {
  22.         if(head == NULL) return head;
  23.  
  24.         Node *head2 = NULL, *itr2 = NULL, *itr = head;
  25.  
  26.         vector<int> pos;
  27.  
  28.         while(itr) {
  29.             Node *newNode = new Node(itr->val);
  30.  
  31.             if(head2 == NULL) {
  32.                 head2 = newNode;
  33.                 itr2 = head2;
  34.             }
  35.  
  36.             else {
  37.                 itr2->next = newNode;
  38.                 itr2 = itr2->next;
  39.             }
  40.                        
  41.             if(itr->random == NULL) pos.push_back(-1);
  42.             else {
  43.                 Node* tmp = head;
  44.                 int cnt = 0;
  45.  
  46.                 while(tmp != itr->random) {
  47.                     cnt += 1;
  48.                     tmp = tmp->next;
  49.                 }
  50.  
  51.                 pos.push_back(cnt);
  52.             }
  53.  
  54.             itr = itr->next;
  55.         }
  56.  
  57.         itr2 = head2;
  58.         int i = 0;
  59.  
  60.         while(itr2) {
  61.             if(pos[i] == -1) {
  62.                 itr2->random = NULL;
  63.  
  64.             }
  65.  
  66.             Node* tmp = head2;
  67.             for(int j = 0; j <= pos[i]; j++) {
  68.                 if(j == pos[i]) {
  69.                     itr2->random = tmp;
  70.                 }
  71.  
  72.                 else tmp = tmp->next;
  73.             }
  74.  
  75.             itr2 = itr2->next;
  76.             i += 1;
  77.         }
  78.  
  79.         return head2;
  80.     }
  81. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement