算法_复制带随机指针的链表(#138)

93 阅读2分钟

题目

题目大致意思: 去复制一个带有随机指针的链表,意思就是说这个被复制的链表它有好些指针,平时我们遇到的都是next的指针,这个链表除了有next规律的指针还有random不规则的指针,这个不规则就是它是乱指随意指的,链表里面的节点random指针互相没有规则的指

image.png

问题思考

要复制这样的链表,如果只有有规则的next指针那很简单,一遍历节点赋值到新链表里面就可,
但是这个random指针它是没有规则的,如果简单的一复制的话,
那么它的Random指针就会指向被复制节点它random指向的那个节点,
也就是说复制后节点的random和被复制节点的random是一样的,这就不行,
复制后节点的random应该指向它自己对应的random。

分析一波

思路

可以给每个节点后面复制一个跟自己一模一样的节点,
然后复制后节点的next等于被复制节点的next,
复制后节点的random等于被复制节点的random。
然后所有的被复制节点和复制后的节点按照相应位置串成一个链表。

紧接着复制后节点的next是下一个被复制节点的next,
复制后节点的random刚好是被复制节点random的下一个节点,
也就是被复制节点的random.next。

上面复制后节点的,next和random指针都正确归位指向啦。

最后把偶数位的节点(也就是被复制后的节点因为我们复制时是把复制后的节点紧跟在被复制节点的后面的)形成一个链表返回就可以啦。

自己手画走一遍

image.png

image.png