码迷,mamicode.com
首页 > 其他好文 > 详细

复杂链表的复制

时间:2020-07-14 21:52:34      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:code   def   com   位置   技术   指针   计数   ada   head   

技术图片
技术图片
技术图片

代码

/*
// Definition for a Node.
class Node {
    int val;
    Node next;
    Node random;

    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
*/
class Solution {
    public Node copyRandomList(Node head) {
        if(head==null) return null;
        Node tmp = head,headA,headB;
        headA =new Node(head.val);
        headB=headA;
        while(tmp!=null){//安排好next指针(先让节点连起来)
           tmp=tmp.next;
           if(tmp==null) break; 
           Node cur =new Node(tmp.val);
           headA.next=cur;
           headA=cur;
        }
        tmp=head;
        Node cur=headB;
       
        while(tmp!=null){//安排random指针
            //初始化数据
            int i=0,j=0;
            headA=headB;
            Node tmp1=head;
            while(tmp1!=null){//双重循环确定每一个节点的random指向的位置(用计数器记录)
                if(tmp.random==null){
                    i=-1;break;
                } 
                i++;
                if(tmp.random==tmp1){
                    break;
                }
                tmp1=tmp1.next;
            }
            
            while(headA!=null){
            if(i==-1) break;
             j++;
             if(i==j){//移动到之前计数的相同位置直接进行指向
                 cur.random=headA;
                 break;
             }
             headA=headA.next;
            }
            tmp=tmp.next;
            cur=cur.next;
        }
        return headB;
    }
}

复杂链表的复制

标签:code   def   com   位置   技术   指针   计数   ada   head   

原文地址:https://www.cnblogs.com/cstdio1/p/13301260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!