面试题三十五:复杂链表的复制

 

在复杂链表中,每个节点不止有指向下一个节点的指针,还有一个指向表中任意节点的指针pSibling。

方法:
第一步在每个节点N后面创建节点'N,把N'连接到N的后面

void f1(ListNode pHead){
            ListNode pNode =pHead;
            while( pNode !=null) {
                    ListNode pCloned= new ListNode();
                    pCloned.value = pNode.value;
                    pCloned.next= pNode.next;
                    pCloned.pSibling= null;

                    pNode.next=Cloned;
                    pNode=Cloned.next;
            }

    }

第二步:设置复制出来节点的pSibling

    void f2(ListNode pHead){
        ListNode pNode =pHead;
        while( pNode !=null) {
                ListNode pCloned= pNode;
                
                if( pNode.pSibling != null)
                       pCloned.pSibling= pNode.pSibling.next;                 
                pNode=Cloned.next;
        }

}

第三步:拆分链表,奇数位连接起来就是原始链表,偶数位则是复制的链表结果

   ListNode f3(  ListNode pHead){
             ListNode pNode=pHead;
             ListNode pClonedHead= null;
             ListNode pClonedNode =null;           
             //定义头结点
             if(pNode !=null){
                    pClonedHead=pClonedNode=pNode.next;
                    pNode.next=pClonedNode.next;
                    pNode=pNode.next;                               
             }             
             while( pNode !=null){
                     pClonedNode.next =pNode.next;
                     pClonedNode = pClonedNode.next;
                    pNode.next=pClonedNode.next;
                    pNode =pNode.next;                      
             }     
     }

猜你喜欢

转载自www.cnblogs.com/niliuxiaocheng/p/12592380.html