[leetcode] 【链表】 138. Copy List with Random Pointer

来源:互联网 发布:办公楼网络布线图 编辑:程序博客网 时间:2024/06/06 09:46

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.

题意

 一个链表包含额外的随机指针,这个指针指向任意节点或空。

复制这个链表。

题解

 分三步:

1、复制链表值及顺序,我这里使用的方法是在每个节点后加一个一样的节点

2、复制random指针,因为第一步中,拷贝的节点放在当前结点后面,所以可以这么实现 cur->next->random=cur->random->next

3、把两个链表分开即可。


/** * 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) {        for(RandomListNode *cur=head;cur;)        {            RandomListNode *node=new RandomListNode(cur->label);            node->next=cur->next;            cur->next=node;            cur=node->next;        }        for(RandomListNode *cur=head;cur;)        {            if(cur->random!=NULL)                cur->next->random=cur->random->next;            cur=cur->next->next;        }        RandomListNode newhead(-1);        for(RandomListNode *cur=head,*newlist=&newhead;cur;)        {            newlist->next=cur->next;            cur->next=cur->next->next;            newlist=newlist->next;            cur=cur->next;        }        return newhead.next;    }};



0 0
原创粉丝点击