輸入一個複雜鏈表(每一個節點中有節點值,以及兩個指針,一個指向下一個節點,另外一個特殊指針指向任意一個節點),

//方案一:1 先複製一個鏈表,2在把random賦引用node

public class Solution {dom

public RandomListNode Clone(RandomListNode pHead)
{
    if(pHead==null)
        return null;
		
    RandomListNode root = new RandomListNode(-1);
    
    RandomListNode temp = root;
    RandomListNode cur=pHead;
    
    while(cur!=null){
        temp.next=new RandomListNode(cur.label);
        temp=temp.next;
        cur=cur.next;
    }
    
    RandomListNode temp1=pHead;
    RandomListNode temp2=null;
    RandomListNode temp3=root.next;
    RandomListNode temp4=null;
    
    while(temp1!=null){
      
        if(temp1.random==null){
            temp1=temp1.next;
            temp3=temp3.next;
            continue;
        }
        
        temp2=pHead;
        temp4=root.next;
        
        while(temp1.random!=temp2){
            temp2=temp2.next;
            temp4=temp4.next;
        }
        
        temp3.random=temp4;
        
         temp1=temp1.next;
         temp3=temp3.next;
    }
   
    return root.next;
}

}code

//方案二:io

public class Solution {class

public RandomListNode Clone(RandomListNode pHead)
{
    if(pHead==null)
        return null;
    
    RandomListNode cur=pHead;

    while(cur!=null){
        RandomListNode node=new RandomListNode(cur.label);
        node.next=cur.next;
        cur.next=node;
        cur=node.next;
    }
    
    cur=pHead;
  
    while(cur!=null){
        if(cur.random==null){
            cur=cur.next.next;
            continue;
        }else{
            cur.next.random=cur.random.next;
            cur=cur.next.next;
        }
    }
    
   cur=pHead;
   RandomListNode root=cur.next;
   RandomListNode temp=null;
    
    while(cur!=null){
       temp=cur.next;
       cur.next=temp.next;
        
       if(temp.next==null)
           temp.next=null;
        else
            temp.next=temp.next.next;
        cur=cur.next;
        
    }
    
    return root;
}

}List

相關文章
相關標籤/搜索