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.
1 題意要求復(fù)制這個特殊鏈表
2 一個節(jié)點一個節(jié)點地處理:包括node.val, node.next, node.random
3 copy一個帶有random pointer list最大的問題是冒掌,有可能這個指向的node還沒有被copy到蒿讥,
4 舊的node做為key兄一,新的node是value
5 要注意head為空時的corner case
1 第一個紅框堂竟,因為你在后面copy的時候馒疹,curr.next curr.random有可能是None,所以需要先賦值一下
2 第二個紅框,因為dic[curr].next 和dic[curr].random也必須是dic中的value,而不是key浪漠,這樣才能連接起來
3 三刷:只需要用一個cur指向head就行了,然后一個一個copy霎褐,不需要建立什么dummy head
注意lambda函數(shù)的表達方式
因為dic的value默認是一個Node址愿,所以我們在copy的時候不需要建立新的Node了,只需要去更新其val, next 和random就行了
1 注意用一個cur指針冻璃,因為后邊返回結(jié)果的時候有用到head响谓,所以需要保存head,但在遍歷的時候直接用cur就可以了
2 dictionary中的key直接用node就行省艳,不需要用node.val娘纷,這樣在實際操作中更方便