题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
分类:链表,hash
解法1:第一次遍历链表,根据链表新建节点,同时保存链表节点到新建节点的映射,到一个hashmap
第二次链表,根据hashmap创建新建节点之间的特殊指针关系
分类:链表,hash
解法1:第一次遍历链表,根据链表新建节点,同时保存链表节点到新建节点的映射,到一个hashmap
第二次链表,根据hashmap创建新建节点之间的特殊指针关系
/*
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);
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();
Iterator<Entry<RandomListNode,RandomListNode>> it = set.iterator();
while(it.hasNext()){
Entry<RandomListNode, RandomListNode> next = it.next();
next.getValue().random = map.get(next.getKey().random);
}
return map.get(pHead);
}
}