Leetcode: Copy List With Random Pointer分析理解
来源:互联网 发布:遗传算法求解步骤 编辑:程序博客网 时间:2024/06/06 01:04
题目大意:给定一个链表,链表中的每个节点除了含有next指针,还含有一个random指针,该指针指向链表中的任意节点或为NULL。求该链表的深拷贝。
分析:首先,说明一下深拷贝的含义。所谓深拷贝是指对需要拷贝的值,创建一个新的空间来保存这个值,当删除任何一个变量时,不会出错,因为他们的地址不同。进而可以联想到对应的浅拷贝,浅拷贝是指在对象复制时,只是对对象中的数据成员进行简单的复制,默认拷贝构造函数就是采用的浅拷贝,大多数情况下,浅拷贝已经可以很好的工作了,但是一旦对象存在了动态成员,浅拷贝就会出现问题。因为浅拷贝采取的是把一个变量中的数据地址直接赋值给另一个变量,删除其中任何一个变量,另一个变量中就没有了地址数据。(深拷贝和浅拷贝的详细分析参见:http://blog.csdn.net/bluescorpio/article/details/4322682)
深拷贝简单的理解就是创建出来一个值和原对象相同的对象。本题要考虑到random指针,它指向的对象的值也必须不能改变。
1. 在每个节点后插入一个自己的拷贝;
2. 设置新节点的random指针;
3. 将新链表和原始链表分离开来。返回新链表的头指针即可。
Java代码实现:
/** * 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 res = null; RandomListNode tmp; RandomListNode p = head; while(p != null) { //在每个节点后插入自己的拷贝 RandomListNode node = new RandomListNode(p.label); tmp = p.next; p.next = node; node.next = tmp; if(res == null) { res = node; } p = tmp; } p = head; while(p != null) { //设置新节点的random指针 tmp = p.next; if(p.random != null) { tmp.random = p.random.next; } p = tmp.next; } p = head; tmp = res; while(tmp.next != null) { //分离新链表和原始链表 p.next = tmp.next; p = p.next; tmp.next = p.next; tmp = tmp.next; } p.next = null; return res; }}
0 0
- Leetcode: Copy List With Random Pointer分析理解
- [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] Copy List with Random Pointer
- LeetCode OJ:Copy List with Random Pointer
- C++_简单C++程序
- ActionBar 修改title 的字体 大小和颜色
- Java 6 JVM参数选项大全(中文版)
- Linux企业级开发技术(7)——libevent企业级开发之锁和线程
- 数据结构之堆栈
- Leetcode: Copy List With Random Pointer分析理解
- 解决rpmdb:Lock table is out of available locker entries问题
- android中的颜色color使用总结
- dedeeims设置当前导航条样式的方法
- JAVA中类Cursor的定义
- 利用ENGINE替换OPENSSL中的加解密算法
- SQLSERVER中的 CEILING函数和 FLOOR函数
- Hadoop MapReduce的shuffle过程
- adb shell命令使android设备睡眠或唤醒