输入1个复杂链表(每一个节点中有节点值,和两个指针,1个指向下1个节点,另外一个特殊指针指向任意1个节点)
HashMap
先next链接
再random链接
/*
public class RandomListNode {
int label;
RandomListNode next = null;
RandomListNode random = null;
RandomListNode(int label) {
this.label = label;
}
}
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
public class Solution {
public RandomListNode Clone(RandomListNode pHead)
{
HashMap<RandomListNode,RandomListNode> map = new HashMap<RandomListNode,RandomListNode>();
RandomListNode p = pHead;
RandomListNode q = new RandomListNode(-1);
// next 链接
while(p!=null){
RandomListNode t = new RandomListNode(p.label);
map.put(p, t);
p = p.next;
q.next = t;
q = t;
}
Set<Entry<RandomListNode,RandomListNode>> set = map.entrySet();
// random 链接
for(Entry<RandomListNode,RandomListNode> s:set){
Entry<RandomListNode, RandomListNode> next = s;
next.getValue().random = map.get(next.getKey().random);
}
return map.get(pHead);
}
}
上一篇 JPG的工作原理