[置顶] Hash方法实现复杂链表的复制
2018-04-04 11:08
447 查看
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。/* 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; import java.util.Set; public class Solution { public RandomListNode Clone(RandomListNode pHead) { if(pHead == null) return null; //开始复制、连接链表 RandomListNode pNode = pHead; RandomListNode pCloned = null; //复制得到的链表的头结点 RandomListNode pCNext = null; Map<RandomListNode,RandomListNode> mapNodes = new HashMap<RandomListNode,RandomListNode>(); while(pNode != null) { if(pNode == pHead) { pCloned = new RandomListNode(pNode.label);//复制头结点 pCNext = pCloned; } else { pCNext.next = new RandomListNode(pNode.label);//复制一个结点 pCNext = pCNext.next; } mapNodes.put(pNode, pCNext); pNode = pNode.next; } //开始连接random Set<RandomListNode> s = mapNodes.keySet(); //取出键集合 Iterator<RandomListNode> it = s.iterator(); while(it.hasNext()) { RandomListNode rNode = it.next(); //取出原链表的结点 if(rNode.random != null) { RandomListNode rCloned = mapNodes.get(rNode); //取出原链表结点的克隆结点 rCloned.random = mapNodes.get(rNode.random); //连接random } } return pCloned; } }
相关文章推荐
- 49. 3种方法实现复杂链表的复制[clone of complex linked list]
- [置顶] C++全排列:一种新的全排列方法(使用单向链表实现)
- 剑指Offer:面试题26——复制复杂的链表(java实现)
- [置顶] C++全排列:一种新的全排列方法(使用单向链表实现)
- C语言之复杂链表的复制方法(图示详解)
- C++实现复杂链表的复制
- 剑指offer第二十五题【复杂链表的复制】c++实现
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- [置顶] C++全排列:一种新的全排列方法(使用单向链表实现)
- 剑指offer--面试题26:复杂链表的复制--Java实现
- 经典面试题之复杂链表复制的简单实现
- 剑指offer面试题26:复杂链表的复制Java实现
- 复杂链表的复制(Java实现)
- Java面试题-实现复杂链表的复制代码分享
- [置顶] C++全排列:一种新的全排列方法(使用单向链表实现)
- 用C++ 实现复杂链表的复制
- sql复制表结构和数据的实现方法
- [置顶] 在J2ME里面实现J2SE中的split的方法
- 算法题35 复杂链表的复制
- 单链表翻转的多种方法实现(c语言)