1、链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域,赋值方法有很多种
2、为方便说明,这里以一个复杂链表作为前提,其中每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中任意一个节点,另外仅做解法的简单说明
3、解法一:时间复杂度为O(N2)的算法,将私网褡爸整个复制过程分为两步:第一步复制原始链表上的每一个节点,并用m_p绿覆冗猩Next链接起来;第二步是设置m_pSibling指针,此解法时间主要花费在定位结点的m_pSibling上
4、解法二:空间换时间的解法,第一步仍然是复制原始链表上的每一个节点,并用m_pNext链接起来,同时把<N,N'>的配对信息放到一个哈希表中;第二步还是设置m_pSibling指针
5、解法三:无需辅助空间,时间复杂度为O(N)的解法,第一步仍然根据原始链表中的每个结点N创建对应的节点N',同时把N'链接在N的后面;第二步设置复制出来的结点的m_pSibling指针
6、第三步把这个长链表拆分成两个链表:将奇数位置的结点链接起来就是原始链表,将偶数位置的结点链接起来就是复制的链表,最后将以上三步合起来