Leetcode:Copy List with Random Pointer
2015-06-20 10:34
375 查看
Return a deep copy of the list.
1. 使用HashMap,记录源节点与新节点的对应关系,或者源节点与next的关系,或者源节点与random的关系。
2.直接在源节点后面复制源节点,random也是指向源节点random的next,然后分割链表即可。
代码:
/** * 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; RandomListNode dummy = new RandomListNode(0); RandomListNode node1 = head; RandomListNode node2 = dummy; HashMap<RandomListNode,RandomListNode> map = new HashMap<RandomListNode,RandomListNode>(); while(node1!=null) { RandomListNode copynode = new RandomListNode(node1.label); copynode.random = node1; node2.next = copynode; map.put(node1,node1.next); RandomListNode tmp = node1; node1 = node1.next; tmp.next = copynode; node2 = node2.next; } node2 = dummy.next; while(node2!=null) { if(node2.random.random!=null)node2.random = node2.random.random.next; else node2.random = null; node2 = node2.next; } node1 = head; while(node1!=null) { node1.next = map.get(node1); node1 = node1.next; } return dummy.next; } }
____________
| |
0——>1——>2——>3——>4——>5——>null
相关文章推荐
- [C/C++]反转链表
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- C语言双向链表的表示与实现实例详解
- C语言实现输出链表中倒数第k个节点
- C++语言实现线性表之链表实例
- STL list链表的用法详细解析
- C语言创建链表错误之通过指针参数申请动态内存实例分析
- JavaScript中数据结构与算法(三):链表
- 编码实现从无序链表中移除重复项(C和JAVA实例)
- Java采用循环链表结构求解约瑟夫问题
- Python实现的数据结构与算法之链表详解
- leetcode 179 Largest Number