本文介紹兩種解法。
解法1:利用乙個map
listnode *copyrandomlist(listnode *head)
//第二次迴圈把新節點的random指標賦值
tmpnode = head;
while(tmpnode != null)
else
tmpnode = tmpnode->next;
}return newhead->next;
}
方法2: 還有一種更好的方法,看下圖就能理解。
1)先複製乙份原鍊錶,然後更新新鍊錶的random: node->next->random = node->random->next;最後拆分兩個鍊錶。
listnode *copyrandomlist(listnode *head)
//再遍歷一次更新新鍊錶的random節點
currnode = head;
while(currnode != null && currnode->next != null)
else
currnode = tmpnode;
/*第二個迴圈更優雅的寫法:
while(currnode != null)
else
currnode = tmpnode->next;
} */}
//拆分兩個鍊錶
listnode *dummynode = new listnode(0);
listnode *newhead = dummynode;
currnode = head;
while(currnode != null && currnode->next != null)
dummynode->next = null;
return newhead->next;
/*拆分鍊錶的另一種寫法:
currnode = head;
listnode *dup = head->next;
while(currnode != null)
return dup;*/}
深度拷貝乙個鍊錶
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回乙個該鍊錶的深度拷貝。1 遍歷該鍊錶,複製每乙個節點,插入到當前節點的後面.形成如下鍊錶.1 1 2 2 2 將每個拷貝節點的隨機指標域,指向原節點 即拷貝節點的上乙個節點 的隨即指標域指向 ...
帶有隨機指標鍊錶的複製
上次介紹了關於鍊錶的相交與求環問題,這次我來給大家介紹乙個讓我腦瓜子嗡嗡的複雜鍊錶的複製問題。說實話,鍊錶也太狂野了,太會玩了,都快趕上蘇大強了。我的個天,畫了半天,別介意,本人畫畫水平不是特別高,大家湊合看。如上圖所示,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。現...
隨機指標鍊錶深拷貝
題目描述給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。要求返回這個鍊錶的 深拷貝。我們用乙個由 n 個節點組成的鍊錶來表示輸入 輸出中的鍊錶。每個節點用乙個 val,random index 表示 val 乙個表示 node.val 的整數。random ...