这个题的意思从题目中就能体现的很清楚了,就是给定一个比较复杂的链表,复制这个链表。
复杂的链表通常不仅仅包含一个指向next的指针,可能还有其他指针指向其他的链表元素。
那么一般来说,在复制的时候,都应该首先创建结点,将链表按照next的方式连接起来,然后再遍历原链表,复制链表中的相应节点指向其他节点的指针,但是这个时间复杂度比较高,因为每次都需要从头开始往后进行遍历链表。(因为不一定其他节点就在该节点的后面,有可能是再前面)。这样这个过程就会耗费o(n)的时间复杂度。
为了降低复杂度,可以采用两种方法,一种是哈希表的方式,利用哈希表存储n和n’之间的关系,这样能够通过n直接定位到n’,虽然暂时不太明白是怎么直接定位的。
第二种方式就是文章中比较推荐的方式了,首先将复制链表中的各个节点插入到原链表中,例如原链表为abcde,那么现在的链表为aa'bb'cc'dd'ee’,然后如果a还指向c,那么a’就指向c’,这样遍历完一次链表之后,就完成了其他指针的引用,最后只需要拆分链表就行了,用两个指针,一个指向a,一个指向a’,每次移动两个节点,指向当前节点的下下个节点,直到遍历完整个链表。
由于这个数据结构比较复杂,就不进行编程实现了。