zoukankan      html  css  js  c++  java
  • 【LeetCode】Copy List with Random Pointer

    A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

    Return a deep copy of the list.

    思路:第一遍正常复制链表,同一时候用哈希表保存链表中原始节点和新节点的相应关系,第二遍遍历链表的时候,再复制随机域。

    这是一种典型的空间换时间的做法,n个节点,须要大小为O(n)的哈希表,同一时候时间复杂度能够减少到O(n)。

    /**
     * Definition for singly-linked list with a random pointer.
     * class RandomListNode {
     *     int label;
     *     RandomListNode next, random;
     *     RandomListNode(int x) { this.label = x; }
     * };
     */
    public class Solution {
        public RandomListNode copyRandomList(RandomListNode head) {
            if (head == null) {
    			return head;
    		}
    		HashMap<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>();
    		RandomListNode res = null;
    		RandomListNode taiListNode = null;
    		RandomListNode cur = head;
    		while (cur != null) {
    			if (res == null) {
    				res = new RandomListNode(cur.label);
    				res.next = res.random = null;
    				taiListNode = res;
    				map.put(head, res);
    			}
    			else{
    				taiListNode.next = new RandomListNode(cur.label);
    				taiListNode = taiListNode.next;
    				map.put(cur, taiListNode);
    				
    			}
    			cur = cur.next;
    		}
    		taiListNode.next = null;
    		cur = head;
    		taiListNode = res;
    		while (cur != null) {
    			taiListNode.random = (RandomListNode)map.get((RandomListNode)cur.random);
    			cur = cur.next;
    			taiListNode = taiListNode.next;
    		}
    		return res;
        }
    }


  • 相关阅读:
    Maven---右键Servlet模板
    付宇泽 20191128-1 总结
    付宇泽20191121-1 每周例行报告
    付宇泽20191114-1 每周例行报告
    安装tensorflow时出现找不到模块问题
    罗杨美慧 20191128-1 总结
    罗杨美慧 20191121-1 每周例行报告
    罗杨美慧 20191114-1 每周例行报告
    罗杨美慧 20191107-1 每周例行报告
    罗杨美慧 20191031-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6734945.html
Copyright © 2011-2022 走看看