算法题LC13: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.
输入描述:
输出描述:
示例1:
输入:
输出:
代码:
import java.util.*;
/**
* 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 null;
Map<RandomListNode,RandomListNode> map = new HashMap<>();
RandomListNode p = head;
RandomListNode nex = head.next;
while(p!=null)
{
RandomListNode newNode = new RandomListNode(p.label);
newNode.next = nex;
map.put(p,newNode);
p = nex;
if(nex != null)
nex = nex.next;
}
for(RandomListNode old : map.keySet())
{
RandomListNode newNode = map.get(old);
if(old.random != null)
{
newNode.random = map.get(old.random);
map.put(old,newNode);
}
}
return map.get(head);
}
}
标签:map,copy,random,list,RandomListNode,nex,newNode,null 来源: https://blog.csdn.net/alidingding/article/details/104673060