Copy List with Random Pointer(two pointers)

来源:互联网 发布:咱们裸熊雨伞 淘宝 编辑:程序博客网 时间:2024/06/07 05:29

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.


这道题要返回一个新的,但构造和原来链表相同的一个链表

每个节点有两个指针,一个指向后继节点,还有一个指向某一个节点或者为空,难点在于我们怎样copy随机指针,怎样知道它到底指向哪一个节点

我们可以换一种思路,我们只要知道这个指针到底指向新链表的哪个节点就行,而我们知道随机指针指向原链表的地址,所以我们可以建立一个map,记录两条链表节点一对一的关系

/** * 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 *copyRandomList(RandomListNode *head) {        if(head==nullptr)return nullptr;        RandomListNode prehead(0),*l1=head,*l2=&prehead;        map<RandomListNode*,RandomListNode*>m;        while(l1)        {            l2->next=new RandomListNode(l1->label);            l2=l2->next;            m[l1]=l2;            l1=l1->next;        }        l1=head;        l2=prehead.next;        while(l1)        {                             if(m.find(l1->random)!=m.end())                  l2->random=m[l1->random];                  else                  l2->random=nullptr;                  l1=l1->next;                  l2=l2->next;                    }        return prehead.next;            }};


原创粉丝点击