LeetCode OJ - Copy List with Random Pointer
来源:互联网 发布:社交网络百度云下载 编辑:程序博客网 时间:2024/05/11 17:36
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.
分析:链表操作,使用构建新链表机构不用管random指针,同时记录下旧链表和新链表的节点关系(用map记录);
遍历新链表,new->random = map[old->random]
/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * RandomListNode *next, *random; * RandomListNode(int x) : label(x), next(NULL), random(NULL) {} * }; */class Solution {public: RandomListNode *ret; RandomListNode *copyRandomList(RandomListNode *head) { if(!head) return NULL; RandomListNode *last = NULL; RandomListNode *cur; map<RandomListNode *, RandomListNode *>mapRandom; //复制链表结构 cur = head; while(cur) { RandomListNode *node = new RandomListNode(cur->label); mapRandom.insert(pair<RandomListNode *, RandomListNode *>(cur, node)); node->random = cur->random; if(last) last->next = node; last = node; cur = cur->next; } mapRandom.insert(pair<RandomListNode *, RandomListNode *>(NULL, NULL)); //复制random指针 cur = mapRandom[head]; while(cur) { cur->random = mapRandom[cur->random]; cur = cur->next; } return mapRandom[head]; }};
如果没有map,在遍历中记录头节点方法:可以采用last指针,当last为空时记录头节点,否则连接链表节点。
if(last) last->next = node; else ret = node;
写代码时犯了一个低级错误“RandomListNode *last;”,自动变量初始化值是随机的,需要显示赋值。《深入理解计算机系统》准备再看一遍。
0 0
- LeetCode OJ:Copy List with Random Pointer
- LeetCode OJ - Copy List with Random Pointer
- LeetCode OJ Copy List with Random Pointer
- [LeetCode OJ] 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
- 美女时钟
- SetCapture() 和 ReleaseCapture()
- c++读取lua配置基础类
- C++反射机制
- Maven安装(windows系统)
- LeetCode OJ - Copy List with Random Pointer
- uva 11038 - How Many O's?(计数问题)
- 博弈论基础知识: 巴什博奕+威佐夫博奕+尼姆博弈(及Staircase)
- 区间DP中的环形DP
- android 通话记录的导入/导出
- 【1元玩景点】去厦门,就去惠和石文化园。感受不一般的石文化、不一般的惠安文化!
- POJ - 1010 STAMPS
- arcgis server api for flex 笔记
- oracle 导入EXCEL数据的简单方法