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.


看了微信公众账号待字闺中的答案:

http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5ODIzNDQ3Mw==&appmsgid=10000291&itemidx=1&sign=ccde63918a24dee181f1fd1a4e3e6781

public RandomListNode copyRandomList(RandomListNode head) {
		if (head == null) {
			return null;
		}

		RandomListNode node = head;
		RandomListNode temp = null;
		//insert new node
		while (node != null) {
			temp = node.next;

			RandomListNode newNode = new RandomListNode(node.label);
			node.next = newNode;
			newNode.next = temp;

			node = temp;
		}

		//update new node's random
		node = head;
		while (node != null) {
			if (node.random != null) {
				node.next.random = node.random.next;
			}

			node = node.next.next;
		}

		RandomListNode newHead = head.next;

		node = head;
		RandomListNode newNode = node.next;
		while (node != null) {
			node.next = newNode.next;
			if (newNode.next != null) {
				newNode.next = newNode.next.next;
			}

			node = node.next;
			if (node != null) {
				newNode = node.next;
			}
		}

		return newHead;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值