拷贝有随机指针的链表

拷贝有随机指针的链表

http://www.nowcoder.com/questionTerminal/60e43001345241ba9266cb4ee6fc6350

细胞分裂法:

  1. 增殖:遍历next指针,拷贝旧节点,并将新节点插入到旧节点之后
  2. 复制:遍历next指针,如果某个节点的random不为空(旧节点),则下一个节点(新节点)的random指向该节点random指向节点的下一个节点
  3. 分裂:遍历next指针,将两个链表分裂开来

图片说明

代码如下:

//
// Created by jt on 2020/9/23.
//
class Solution {
public:
    RandomListNode *copyRandomList(RandomListNode *head) {
        // "增殖"
        if (!head) return nullptr;
        RandomListNode *p = head;
        while (p) {
            RandomListNode *q = new RandomListNode(p->label);
            q->next = p->next;
            p->next = q;
            p = q->next;
        }
        // "复制"
        p = head;
        while (p) {
            if (p->random) { p->next->random = p->random->next; }
            p = p->next->next;
        }
        // "分裂"
        p = head;
        RandomListNode *newHead = p->next;
        while (p) {
            RandomListNode *q = p->next;
            p->next = q->next;
            if (q->next) q->next = q->next->next;
            p = p->next;
        }
        return newHead;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
7
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务