小言_互联网的博客

【剑指Offer】25、复杂链表的复制

366人阅读  评论(0)

有关Node的题都要小心,别写错了,多练~~

这题分三步走~

public class Solution {
    public RandomListNode Clone(RandomListNode pHead)
    {
        if(pHead==null) return null;
        
        //复制每个节点到原节点后面。
        RandomListNode currentNode=pHead;
        while(currentNode!=null){
           RandomListNode cloneNode=new RandomListNode(currentNode.label);  
           RandomListNode nextNode=currentNode.next;
           currentNode.next=cloneNode;
           cloneNode.next=nextNode;
           currentNode=nextNode;
        }
        //遍历新链表,依照老链表的random部分,赋值新链表的random值。
        currentNode=pHead;
        while(currentNode!=null){
            currentNode.next.random=currentNode.random==null?null:currentNode.random.next;
            currentNode=currentNode.next.next;
        }
        //将现链表拆分成两部分,老链表&赋值版本链表。
        currentNode=pHead;
        RandomListNode pCloneHead=pHead.next;
        while(currentNode!=null){
            RandomListNode cloneNode=currentNode.next;
            currentNode.next=cloneNode.next;
            cloneNode.next=cloneNode.next==null?null:cloneNode.next.next;
            currentNode=currentNode.next;
        }
        return pCloneHead;
    }
}

 


转载:https://blog.csdn.net/m0_37976836/article/details/101562164
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场