题目链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/

题目大意

  略。

分析

  空间复杂度 O(1) 的做法非常开拓思维。

代码如下

 /*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random; Node() {} Node(int _val, Node* _next, Node* _random) {
val = _val;
next = _next;
random = _random;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head == NULL) return NULL; Node *p1 = head, *p2, *newhead; // 在原链表中交替嵌入新节点
while(p1 != NULL) {
Node *t = new Node(); t->next = p1->next;
t->val = p1->val;
p1->next = t;
p1 = t->next;
} newhead = head->next;
p1 = head;
p2 = newhead;
// 拷贝random
while() {
if(p1->random == NULL) p2->random = NULL;
else p2->random = p1->random->next;
p1 = p2->next;
if(p1 == NULL) break;
p2 = p1->next;
} p1 = head;
p2 = newhead;
// 分离
while() {
p1 = p1->next = p2->next;
if(p1 == NULL) break;
p2 = p2->next = p1->next;
}
return newhead;
}
};

最新文章

  1. springmvc 多数据源 SSM java redis shiro ehcache 头像裁剪
  2. AccountName LoginName 变更
  3. CSS基础转载
  4. xsd与xsl文件的区别
  5. 查单神器v1.0 升级 →B站看鬼畜神器v1.0
  6. LinearLayout 控件
  7. Windows程序设计-窗口和消息
  8. Spring EL Lists, Maps example
  9. IOS开发UI篇之──自定义UIActionSheet
  10. ios NSHashTable & NSMapTable
  11. android学习——ADT的离线安装
  12. BZOJ 3992 序列统计
  13. ural 1180 Stone Game
  14. opencv是什么
  15. baidu 200兆SVN代码服务器
  16. 多个dropdownlist只有第一个能选中,其他选不中之我见
  17. setTimeout小总结
  18. ionic实战系列(二):使用cordova插件
  19. 使用图片地图减少HTTP请求数量
  20. ubuntu1604使用源码方式安装ruby2.5.0

热门文章

  1. 关于最近练习PYTHON代码的一点心得
  2. svm 之 线性可分支持向量机
  3. Xen的概况
  4. 如何在vim中同时编辑多个文件
  5. 运维 04 Shell基础命令(二)
  6. 使用 U 盘装个 winXP 原版镜像玩红警
  7. 逻辑回归原理,推导,sklearn应用
  8. Alibaba-技术专区-开源项目之TransmittableThreadLocal
  9. Java-技术专区-问题专区-应该了解的基础技术点
  10. Raid,分区表与LVM逻辑卷