復(fù)雜鏈表的復(fù)制

復(fù)雜鏈表的復(fù)制

輸入一個(gè)復(fù)雜鏈表(每個(gè)節(jié)點(diǎn)中有節(jié)點(diǎn)值,以及兩個(gè)指針,一個(gè)指向下一個(gè)節(jié)點(diǎn),另一個(gè)特殊指針指向任意一個(gè)節(jié)點(diǎn)),返回結(jié)果為復(fù)制后復(fù)雜鏈表的head。

Paste_Image.png

代碼如下:

public class ComplexListCopy {
    

    
    public static RandomListNode clone(RandomListNode pHead){
        if(pHead == null){
            throw new NullPointerException();
        }
        
        RandomListNode pCur = pHead;
        RandomListNode pNext = pCur.next;
        
        //復(fù)制
        while(pNext != null){
            pCur.next = new RandomListNode(pCur.label);
            pCur.next.next = pNext;
            pCur = pNext;
            pNext = pNext.next;
        }
        //如果pNext==null,把pCurr.next指向他的復(fù)制品
        pCur.next = new RandomListNode(pCur.label);
        
        //構(gòu)造random
        pCur = pHead;
        while(pCur != null){
            if(pCur.random != null){
                pCur.next.random = pCur.random.next;
            }
            pCur = pCur.next.next;
        }
        
        //拆分鏈表
        pCur = pHead;
        RandomListNode cHead = pCur.next;
        pNext = pCur.next.next;
        RandomListNode cTem = cHead;
        while(pNext != null){
            //當(dāng)前的下一個(gè)指向pNext
            pCur.next = pNext;
            //復(fù)制品的下一個(gè)指向pNext.next(pNext存在,必然pNext.next存在(是pNext的復(fù)制品))
            cTem.next = pNext.next;
            //把cTem指向cTem.next
            cTem = cTem.next;
            //pCur指向pNext
            pCur = pNext;
            //pNext指向pNext.next.next(一個(gè)next是他的復(fù)制,再next才是實(shí)際上的next)
            pNext = pNext.next.next;
        }
        //不要漏掉這個(gè),不然原鏈表最后會(huì)出現(xiàn)一個(gè)復(fù)制品
        pCur.next = null;
        
        return cHead;
        
    }

    //測(cè)試數(shù)據(jù)
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        RandomListNode root = new RandomListNode(1);
        RandomListNode root2 = new RandomListNode(2);
        RandomListNode root3 = new RandomListNode(3);
        RandomListNode root4 = new RandomListNode(4);
        RandomListNode root5 = new RandomListNode(5);
        RandomListNode root6 = new RandomListNode(6);
        
        root.next = root2;
        root2.next = root3;
        root3.next = root4;
        root4.next = root5;
        root5.next = root6;
        
        root4.random = root6;
        root.random = root6;
        root3.random = root;
                
        print(root);
        RandomListNode clone = clone(root);
        print(clone);
        
        
    }
    
    public static void print(RandomListNode node){
        RandomListNode tem = node;
        while(tem != null){
            System.out.print(tem.label + " " );
            if(tem.random != null){
                System.out.print(tem.random.label + " ");
            }
            tem = tem.next;
        }
        System.out.println("");

    }

}

class RandomListNode {
    int label;
    RandomListNode next = null;
    RandomListNode random = null;

    RandomListNode(int label) {
        this.label = label;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 輸入一個(gè)復(fù)雜鏈表(每個(gè)節(jié)點(diǎn)中有節(jié)點(diǎn)值,以及兩個(gè)指針,一個(gè)指向下一個(gè)節(jié)點(diǎn),另一個(gè)特殊指針指向任意一個(gè)節(jié)點(diǎn)),返回結(jié)果...
    鴻雁長(zhǎng)飛光不度閱讀 300評(píng)論 0 0
  • 復(fù)雜鏈表的復(fù)制 題目描述 輸入一個(gè)復(fù)雜鏈表(每個(gè)節(jié)點(diǎn)中有節(jié)點(diǎn)值,以及兩個(gè)指針,一個(gè)指向下一個(gè)節(jié)點(diǎn),另一個(gè)特殊指針指...
    echoVic閱讀 753評(píng)論 0 1
  • 輸入一個(gè)復(fù)雜鏈表(每個(gè)節(jié)點(diǎn)中有節(jié)點(diǎn)值,以及兩個(gè)指針,一個(gè)指向下一個(gè)節(jié)點(diǎn),另一個(gè)特殊指針指向任意一個(gè)節(jié)點(diǎn))。返回一個(gè)...
    IT_Matters閱讀 1,832評(píng)論 0 1
  • 題目描述輸入一個(gè)復(fù)雜鏈表(每個(gè)節(jié)點(diǎn)中有節(jié)點(diǎn)值,以及兩個(gè)指針,一個(gè)指向下一個(gè)節(jié)點(diǎn),另一個(gè)特殊指針指向任意一個(gè)節(jié)點(diǎn)),...
    quiterr閱讀 344評(píng)論 0 0
  • 親愛(ài)的家人們?cè)缟虾茫?我是河南果子?jì)?,我是一位初中?shù)學(xué)教師,也是兩個(gè)孩子的媽媽,大寶七歲了,小寶一歲了。 人生中每...
    靜心137閱讀 524評(píng)論 0 1

友情鏈接更多精彩內(nèi)容