您的位置:首页 > 运维架构

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.将链表拆成两个链表.



代码:

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);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐