【題目描述】
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.
給出一個鏈表,每個節點包含一個額外增加的隨機指針可以指向鏈表中的任何節點或空的節點。
返回一個深拷貝的鏈表。
【題目鏈接】
www.lintcode.com/en/problem/copy-list-with-random-pointer/
【題目解析】
這是一道鏈表操作的題目,要求複製一個鏈表,不過鏈表的每個結點帶有一個隨機指針,指向某一個結點。
一種比較直接的算法:思路是先按照複製一個正常鏈表的方式複製,複製的時候把複製的結點做一個HashMap,以舊結點爲key,新節點爲value。這麼做的目的是爲了第二遍掃描的時候我們按照這個哈希表把結點的隨機指針接上。這個算法是比較容易想到的,總共要進行兩次掃描,所以時間複雜度是O(2*n)=O(n)。空間上需要一個哈希表來做結點的映射,所以空間複雜度也是O(n)。
【參考答案】
www.jiuzhang.com/solutions/copy-list-with-random-pointer/