zoukankan      html  css  js  c++  java
  • [leetcode]138. Copy List with Random Pointer复制带有随机指针的链表

    public RandomListNode copyRandomList(RandomListNode head) {
            /*
            深复制,就是不能只是复制原链表变量,而是做一个和原来链表一模一样的新链表,
            每一个节点都是新建的,而不是指向就节点
            这个题的难点在于:随机节点。
            随机节点有可能指向后边还没有建立的节点,这就没法指。
            方法一:一一对应地记录每个新旧节点的映射关系,在常规节点建立后,就去查哈希表,找到对应
            新节点的旧节点的random,就是新节点的random
             */
            if (head==null)
                return null;
            Map<RandomListNode,RandomListNode> map = new HashMap<>();
            //新节点
            RandomListNode n = new RandomListNode(head.label);
            //记住:二叉树、链表这种前后有关联的数据结构,要迭代(注意是迭代方式)遍历的时候,一定要建立一个结构代表当前节点,往下遍历(递归看情况)
            RandomListNode curN=n,curO=head;
            map.put(curO,curN);
            //先复制常规节点
            while (curO.next!=null)
            {
                //复制节点
                curN.next = new RandomListNode(curO.next.label);
                curN = curN.next;
                curO = curO.next;
                //建立映射
                map.put(curO,curN);
            }
            //复制random之前先初始化两个cur
            curN = n;
            curO = head;
            while (curN!=null)
            {
                if (curO.random!=null)
                {
                    //通过映射找到random
                    curN.random = map.get(curO.random);
                }
                curN = curN.next;
                curO = curO.next;
            }
            return n;
        }
  • 相关阅读:
    关于<form>标签
    javaEE学习随笔
    类与接口
    java学习中的一些总结
    java 对象的创建
    jQuery选择器
    CSS学习随笔
    JDBC笔记 二
    Java EE笔记 (1) JDBC
    泛型笔记
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8303849.html
Copyright © 2011-2022 走看看