hello congshen

自我成长

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

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;
    }
};



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014654002/article/details/51564458
文章标签: leetcode cpp
个人分类: leetcode链表 c-c++
上一篇[leetcode] 【链表】25. Reverse Nodes in k-Group
下一篇[leetcode] 【链表】141. Linked List Cycle
想对作者说点什么? 我来说一句

leetcode算法

2017年11月24日 1MB 下载

HashMap和链表的查找效率比较

2018年04月09日 11.22MB 下载

实现一个模板类的链表(c++)

2018年06月03日 658KB 下载

双向链表实例(VC++)

2008年04月07日 17KB 下载

数据结构 严蔚敏 链表 list

2010年12月05日 7KB 下载

pointer network 用到的数据

2017年07月14日 139.8MB 下载

数据结构链表

2011年12月08日 3KB 下载

没有更多推荐了,返回首页

关闭
关闭