侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

剑指 Offer 35. 复杂链表的复制

Hope
2022-04-01 / 0 评论 / 0 点赞 / 225 阅读 / 597 字
温馨提示:
本文最后更新于 2022-04-01,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

剑指 Offer 35. 复杂链表的复制

思路:

复制小弟和random,在每个p节点的后面,最后再拆分。
image.png

代码:

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;
    
    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};
*/
class Solution {
public:
    Node* copyRandomList(Node* head) {
        
        //复制小弟
        for(auto p = head; p; p = p->next->next){
            auto q = new Node(p->val);
            q->next = p->next;
            p->next = q;
        }

        //复制random
        for(auto p = head; p; p = p->next->next){
            if(p->random){
                p->next->random = p->random->next;
            }
        }

        //拆分
        auto dummy = new Node(-1);
        auto cur = dummy;

        for(auto p = head; p; p = p->next){
            cur = cur->next = p->next;
            p->next = p->next->next;
        }
        return dummy->next;
    }
};
0

评论区