138. 复制带随机指针的链表

package leetcode;

public class demo_138 {
    public Node copyRandomList(Node head) {
        
        //如果原链表为空链表直接返回
        if(head==null) {return null;}
        
        Node otemp=head;

        //在每个节点之后复制一个相同的节点
        while(otemp!=null) {
            Node t=new Node(otemp.val);
            if(otemp.next!=null) {
                t.next=otemp.next;
            }
            //每个节点后插入一个相同的节点
            otemp.next=t;
            otemp=otemp.next.next;
        }
        
        //复制随机指针
        otemp=head;
        while(otemp!=null) {
            if(otemp.random!=null) {
                otemp.next.random=otemp.random.next;
            }
            otemp=otemp.next.next;
        }
        
        
        //创建一个新的头结点
        Node node=head.next;
        Node temp=null;
        otemp=head;
        
        //将原链中断开为两个相同的链表
        while(otemp!=null&&otemp.next!=null) {
            temp=otemp.next;
            otemp.next=temp.next;
            otemp=temp;
        }
        return node;
    }
}

 

posted on 2022-03-03 16:17  一仟零一夜丶  阅读(27)  评论(0)    收藏  举报