LeetCode(Copy List with Random Pointer) 复杂链表的深拷贝
2014-04-07 05:05
429 查看
题目要求:
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.
剑指offer上出现过这个题目,
思路是:
1.首先指向在原链表的每个节点后面,复制一个新的节点,原链表长度变为 2 倍random 指针指向的是 原链表节点 random 指针指向的节点的后面的那个节点。
2.将链表拆成两个链表.
代码:
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.
剑指offer上出现过这个题目,
思路是:
1.首先指向在原链表的每个节点后面,复制一个新的节点,原链表长度变为 2 倍random 指针指向的是 原链表节点 random 指针指向的节点的后面的那个节点。
2.将链表拆成两个链表.
代码:
class Solution { public: void CopyNodeAndRandomPointer(RandomListNode* head) { RandomListNode* node = head; while (NULL != node) { RandomListNode* new_node = new RandomListNode(node->label); new_node->next = node->next; node->next = new_node; node = new_node->next; } //set random pointer node = head; while (NULL != node) { RandomListNode* pnext = node->next; if (NULL != node->random) { pnext->random = node->random->next; } node = pnext->next; } } RandomListNode* SeperateList(RandomListNode* head) { RandomListNode* node = head, *clone_head = NULL, *clone_node = NULL; if (NULL != node) { clone_head = clone_node = node->next; node->next = clone_node->next; node = node->next; } while (NULL != node) { clone_node->next = node->next; clone_node = clone_node->next; node->next = clone_node->next; node = node->next; } return clone_head; } RandomListNode *copyRandomList(RandomListNode *head) { CopyNodeAndRandomPointer(head); return SeperateList(head); } };
相关文章推荐
- [LeetCode]Copy List with Random Pointer &Clone Graph 复杂链表的复制&图的复制
- [Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝
- [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
- 【LeetCode-面试算法经典-Java实现】【138-Copy List with Random Pointer(拷贝有随机指针的单链表)】
- Leetcode Copy List with Random Pointer 拷贝链表
- [LeetCode]Copy List with Random Pointer &Clone Graph 复杂链表的复制&图的复制
- (不会)[LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
- LeetCode——Copy List with Random Pointer(带random引用的单链表深拷贝)
- LeetCode----Copy List with Random Pointer 深度拷贝,浅度拷贝,Lazy拷贝解析
- 附有随机结点指针的链表的深度拷贝 Copy List with Random Pointer
- Copy List with Random Pointer 复制有随机指针的链表@LeetCode
- LeetCode138 Copy List with Random Pointer(深度复制带有随机指针的链表) Java题解
- LeetCode之复制有random指针的链表Copy List with Random Pointer
- LeetCode刷题笔记(链表):copy-list-with-random-pointer
- leetcode---copy-list-with-random-pointer---链表
- 【LeetCode-面试算法经典-Java实现】【143-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 - 再解