美文网首页
29.复杂链表的复制

29.复杂链表的复制

作者: HamletSunS | 来源:发表于2019-08-05 21:01 被阅读0次

题目:把链表复制下来
难点:除了常规的next指针,还有一个指向链表中随机一个节点的指针,随机节点的指针要怎么复制呢?

思路:
我们之所以能够轻松的复制指向下一个节点的指针,是因为我们有着明确的对应关系,我们知道复制后的新链表的下一个节点中的内容对应着原链表的具体的下一个节点。
但是随机指向的指针破坏了这个条件,我们能找到下一个节点,但是我们不能找到随机节点。为了解决这个问题,我们可以考虑建立一个查找表,让链表中的每一个节点都有一个新节点与之对应,这样就可以复制新链表各个节点之间的关系了。

/*
struct RandomListNode {
    int label;
    struct RandomListNode *next, *random;
    RandomListNode(int x) :
            label(x), next(NULL), random(NULL) {
    }
};
*/
class Solution {
public:
    RandomListNode* Clone(RandomListNode* pHead)
    {
        if(pHead==nullptr)
            return nullptr;
        map<RandomListNode *,RandomListNode *> rec;
        RandomListNode *cur=pHead;
        while(cur!=nullptr){
            RandomListNode *node=new RandomListNode(cur->label);
            rec.insert(make_pair(cur,node));
            cur=cur->next;
        } 
        cur=pHead;
        while(cur!=nullptr){
            rec[cur]->next=rec[cur->next];
            rec[cur]->random=rec[cur->random];
            cur=cur->next;
        }
        return rec[pHead];
    }
};

相关文章

  • 29.复杂链表的复制

    题目:把链表复制下来难点:除了常规的next指针,还有一个指向链表中随机一个节点的指针,随机节点的指针要怎么复制呢...

  • 面试题35. 复杂链表的复制

    复杂链表的复制 题目描述 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了...

  • LeetCode:复制带随机指针的链表

    面试题35. 复杂链表的复制 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点...

  • 复杂链表的复制

    时间复杂度为O(n),需要额外空间O(n) 时间复杂度O(n),无额外空间

  • 复杂链表的复制

    题目描述:有一个复杂链表,其结点除了有一个Next指针指向下一个结点外,还有一个random指向链表中的任意结点或...

  • 复杂链表的复制

    题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),...

  • 复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)...

  • 复杂链表的复制

    题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点...

  • 复杂链表的复制

    复杂链表的复制 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个...

  • 复杂链表的复制

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。返回一个...

网友评论

      本文标题:29.复杂链表的复制

      本文链接:https://www.haomeiwen.com/subject/tzpvdctx.html