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 题意要求复制这个特殊链表
2 一个节点一个节点地处理:包括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函数的表达方式
因为dic的value默认是一个Node,所以我们在copy的时候不需要建立新的Node了,只需要去更新其val, next 和random就行了
1 注意用一个cur指针,因为后边返回结果的时候有用到head,所以需要保存head,但在遍历的时候直接用cur就可以了
2 dictionary中的key直接用node就行,不需要用node.val,这样在实际操作中更方便