[LeetCode] Copy List with Random Pointer
来源:互联网 发布:网络布线施工报价单 编辑:程序博客网 时间:2024/06/14 19:18
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
最简单的方法是参照clone graph,利用一个HashMap来存储已经访问过的Node。
不使用额外空间的话,可以把复制的node放在原来node之后(第一次遍历)。再把random pointer设到对应的copy node (第二次遍历)。最后还原原来的list和复制的list(第三次遍历)。
/** * 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 cur = head; //copy the list, the copied node is appended to its orginal node while(cur != null){ RandomListNode next = cur.next; RandomListNode copyNode = new RandomListNode(cur.label); cur.next = copyNode; copyNode.next = next; cur = next; } //copy random pointer cur = head; while(cur != null){ if(cur.random == null) cur.next.random = null; else { cur.next.random = cur.random.next; } cur = cur.next.next; } //reorder the list RandomListNode newListHead = head.next; RandomListNode newListCur = newListHead; cur = head; while(cur != null){ RandomListNode next = cur.next.next; cur.next = next; cur = next; if(next != null){ RandomListNode newListNext = newListCur.next.next; newListCur.next = newListNext; newListCur = newListNext; } } return newListHead; }}
0 0
- [leetcode][list] Copy List with Random Pointer
- Leetcode: Copy List with Random Pointer
- LeetCode: Copy List with Random Pointer
- [LeetCode] Copy List with Random Pointer
- [leetcode]Copy List with Random Pointer
- LeetCode:Copy List with Random Pointer
- leetcode Copy List with Random Pointer
- LeetCode:Copy List with Random Pointer
- LeetCode题解:Copy List with Random Pointer
- [LeetCode]Copy List with Random Pointer
- leetcode Copy List with Random Pointer
- leetcode-Copy List with Random Pointer
- Leetcode: Copy List with Random Pointer
- LeetCode | Copy List with Random Pointer
- [LeetCode] Copy List with Random Pointer
- LeetCode OJ:Copy List with Random Pointer
- LeetCode(138)Copy List with Random Pointer
- [LeetCode] - Copy List with Random Pointer
- [POJ 3169]Layout[差分约束][最短路]
- POJ 1458 Common Subsequence
- Android 深入了解 Handler 和 Looper
- perl中标量的定义和使用
- cf 13a Numbers
- [LeetCode] Copy List with Random Pointer
- 如何在Ubuntu下打开dot文件
- pod的安装与使用三
- perl的控制逻辑语句小结
- Ember.js 入门指南——自定义序列号器
- mysql学习-添加删除约束(constraint)的具体操作
- [HDU 4725]The Shortest Path in Nya Graph[建图]
- UE4蓝图案例:制作透明黑色玻璃
- 数组不能通过toString方法转为字符串