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;
        }
    }
    
  • 相关阅读:
    常用加密算法的Java实现总结(二) ——对称加密算法DES、3DES和AES
    常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
    在服务器上用Fiddler抓取HTTPS流量
    org.apache.commons.lang下的工具类
    Spring-bean作用域scope详解
    Tomcat性能调优方案
    JavaScript 闭包究竟是什么
    JavaScript跨域总结与解决办法
    《JAVA与模式》之简单工厂模式
    hibernate缓存机制详细分析
  • 原文地址:https://www.cnblogs.com/andy-zhou/p/6549664.html
Copyright © 2011-2022 走看看