剑指offer--复杂链表的复制

来源:互联网 发布:淘宝发错货怎么理赔 编辑:程序博客网 时间:2024/05/16 18:39

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

分类:链表,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);}}

0 0
原创粉丝点击