標籤:style blog io color for sp div on log
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
思路:首先將新節點串連到所複製的節點後面,再這樣的鏈表上處理random指標。
時間複雜度O(n),空間複雜度O(1)
1 /** 2 * Definition for singly-linked list with a random pointer. 3 * struct RandomListNode { 4 * int label; 5 * RandomListNode *next, *random; 6 * RandomListNode(int x) : label(x), next(NULL), random(NULL) {} 7 * }; 8 */ 9 class Solution {10 public:11 RandomListNode *copyRandomList(RandomListNode *head) {12 if (head == NULL) return head;13 14 15 for (RandomListNode *curr = head; curr != NULL;) {16 RandomListNode *pter = new RandomListNode(curr->label);17 pter->next = curr->next;18 curr->next = pter;19 curr = pter->next;20 }21 22 //連結rando指標23 for(RandomListNode *curr = head; curr != NULL;) {24 if (curr->random != NULL) {25 curr->next->random = curr->random->next;26 }27 curr = curr->next->next;28 }29 30 //分拆鏈表31 RandomListNode *new_head = head->next;32 for (RandomListNode *curr = head, **new_curr = &new_head; curr != NULL;) {33 *new_curr = curr->next;34 curr->next = curr->next->next;35 36 curr = curr->next;37 38 new_curr = &((*new_curr)->next);39 }40 41 return new_head;42 }43 };
[leetCode] Copy List with Random Pointer