复杂链表的深度拷贝

现有一个链表,链表的结构有两个指针域next,rand,其中rand指针的指向未知,现要求你拷贝这个结构,实现O(1)空间复杂度。

1.弱化约束:不要求空间复杂度。

上图3号节点的next和rand都指向null。

如果直接拷贝,拷贝顺序十分重要,因为可以rand指针指向的位置比next指针还要远很多。

解决办法:

1.我们用一个<Node*,Node*>hash表,将1和他的拷贝节点1'【拷贝的只有值域,不包括rand和next域】放入hash,其余节点相同。

2.遍历原始链表,拷贝。以例子做说明:

假设拷贝1号节点,我们可以直接去hash表查询1号节点的next和rand指向的节点的拷贝节点,即

map[Node].next=map[Node.next];

map[Node].rand=map[Node.rand];

2.强化约束:通过弱化约束我们知道,需要一些结构告诉我们节点位置:

我们将上述链表按照下图这种方式拷贝:

先将拷贝节点建立在原节点后方,当我们拷贝1时,1'的rand就指向1的rand->next,其余节点同理,最后将两个链表分离即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值