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.

方法

	    public RandomListNode copyRandomList(RandomListNode head) {
	        RandomListNode newHead = null;
	        
	        if (head != null) {
	        	RandomListNode cur = head;
	        	while (cur != null) {
		        	RandomListNode temp = new RandomListNode(cur.label);
		        	temp.next = cur.next;
		        	cur.next = temp;
		        	cur = cur.next.next;
	        	}
	        	cur = head;
	        	RandomListNode newCur = head.next;
	        	while(cur != null) {
	        		if (cur.random != null) {
	        			newCur.random = cur.random.next;
	        		}
	        		cur = cur.next.next;
	        		if (cur != null) {
	        			newCur = newCur.next.next;
	        		}
	        		
	        	}
	        	
	        	cur = head;
	        	newHead = cur.next;
	        	newCur = newHead;
	        	while (cur != null) {
	        		cur.next = newCur.next;
	        		cur = newCur.next;
	        		if (cur != null) {
		        		newCur.next = cur.next;
		        		newCur = cur.next;
	        		} else {
	        			newCur.next = null;
	        		}

	        	}
	        }
	        
	        
	        return newHead;
	    }


版权声明:本文博客原创文章,博客,未经同意,不得转载。





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4656533.html,如需转载请自行联系原作者


相关文章
|
C++
Leetcode Copy List with Random Pointer(面试题推荐)
给大家推荐一道leetcode上的面试题,这道题的具体讲解在《剑指offer》的P149页有思路讲解,如果你手头有这本书,建议翻阅。
52 0
LeetCode 382. Linked List Random Node
给定一个单链表,随机选择链表的一个节点,并返回相应的节点值。保证每个节点被选的概率一样。
68 0
LeetCode 382. Linked List Random Node
LeetCode 138:复制带随机指针的链表 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.
845 0
|
DataX 程序员 算法
Single linked list by pointer
其实本应该从一般性的表讲起的,先说顺序表,再说链表 。但顺序表的应用范围不是很广,而且说白了就是数组的高级版本,他的优势仅在于两点:1.逻辑直观,易于理解。2.查找某个元素只需要常数时间——O(1),而与此同时,因为每个单元的物理内存都是连续的,所以不便于移动,不便于精细化操作,每次插入和删除都会带来巨额的时间开销。
1040 0
|
Java
java中copy 一个list集合的方法
java将一个list里的数据转移到另外一个list,可以使用for语句,一次使用add方法,示例如下:   ArrayList list1=new ArrayList(); list1.add("1"); list1.
3034 0
|
6月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
988 1
|
5月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
5月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。