複製帶隨機指標的連結串列

weixin_34194087發表於2016-08-25

給出一個連結串列,每個節點包含一個額外增加的隨機指標可以指向連結串列中的任何節點或空的節點。
返回一個深拷貝的連結串列。

  • 解法一(參考):
    建立雜湊表,然後遍歷連結串列,深複製的同時將複製的舊節點作為key,新節點作為value存進雜湊表,
    第二次遍歷 以原連結串列的一個節點的隨機指標值作為索引,查詢對應的新連結串列的對應節點的隨機指標值

  • 解法二
    參考

//雜湊表
class Solution {
public:
    /**
     * @param head: The head of linked list with a random pointer.
     * @return: A new head of a deep copy of the list.
     */
    RandomListNode *copyRandomList(RandomListNode *head) {
        // write your code here
        map<RandomListNode*,RandomListNode*> hash;
        
        RandomListNode *curr = head;
        RandomListNode *newHead = new RandomListNode(curr->label);
        
        RandomListNode * newCurr = newHead;
        
        hash[curr] = newHead;
        
        while(curr->next) {
            curr = curr -> next;
            RandomListNode *newNode = new RandomListNode(curr->label);
            hash[curr] =  newNode;
            newCurr->next = newNode;
            newCurr = newCurr->next;
            
        } 
        
         newCurr = newHead;
         curr = head;
        while(newCurr) {
            
            newCurr->random = hash[curr->random];
            newCurr = newCurr->next ;
            curr = curr->next;
    }
    return newHead;
    }
};

相關文章