zoukankan      html  css  js  c++  java
  • 26:复杂链表的复制

    import java.util.HashMap;
    
    /**
     * 面试题26:复杂链表的复制
     * 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),
     * 返回结果为复制后复杂链表的head。(
     * 注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
     */
    public class _26_linked_copy {
        public static void main(String[] args){
            Solution26 solution26 = new Solution26();
            //{1,2,3,4,5,3,5,#,2,#}
            RandomListNode26 randomListNode1 = new RandomListNode26(1);
            RandomListNode26 randomListNode2 = new RandomListNode26(2);
            RandomListNode26 randomListNode3 = new RandomListNode26(3);
            RandomListNode26 randomListNode4 = new RandomListNode26(4);
            RandomListNode26 randomListNode5 = new RandomListNode26(5);
            randomListNode1.next=randomListNode2;
            randomListNode2.next=randomListNode3;
            randomListNode3.next=randomListNode4;
            randomListNode4.next=randomListNode5;
            randomListNode1.random=randomListNode3;
            randomListNode2.random=randomListNode4;
            randomListNode3.random=null;
            randomListNode4.random=randomListNode2;
            randomListNode5.random=null;
    
            RandomListNode26 pResult=solution26.Clone(randomListNode1);
            RandomListNode26 pResult2=pResult;
            while(pResult!=null){
                System.out.print(pResult.label+"、");
                pResult=pResult.next;
            }
            while(pResult2!=null){
                if(pResult2.random==null){
                    System.out.print("#、");
                }else{
                    System.out.print(pResult2.random.label+"、");
                }
                pResult2=pResult2.next;
            }
        }
    }
    class Solution26 {
        public RandomListNode26 Clone(RandomListNode26 pHead) {
            if(pHead==null){
                return null;
            }
            int count=0;
            RandomListNode26 pResult=new RandomListNode26(pHead.label);
            HashMap<Integer, RandomListNode26> hash = new HashMap<Integer, RandomListNode26>();
            hash.put(++count,pHead.random);
            RandomListNode26 pResultTmp=pResult;
            while(pHead.next!=null){
                RandomListNode26 pTmp=new RandomListNode26(pHead.next.label);
                pResultTmp.next=pTmp;
                hash.put(++count,pHead.next.random);
                pHead=pHead.next;
                pResultTmp=pResultTmp.next;
            }
            pResultTmp.next=null;
            RandomListNode26 tmp=pResult;
            count=1;
            while(tmp!=null){
                if(hash.get(count)!=null){
                    tmp.random=hash.get(count++);
                }else{
                    count++;
                    tmp.random=null;
                }
                tmp=tmp.next;
            }
            return pResult;
        }
    }
    class RandomListNode26 {
        int label;
        RandomListNode26 next = null;
        RandomListNode26 random = null;
        RandomListNode26(int label) {
            this.label = label;
        }
    }
    
  • 相关阅读:
    Android
    Android
    Android
    JAVA动态代理基础
    TCP连接与OKHTTP复用连接池
    Android
    Android
    GitHub上README.md教程
    android
    HDU 1097 A hard puzzle
  • 原文地址:https://www.cnblogs.com/andy-zhou/p/6549664.html
Copyright © 2011-2022 走看看