单链表OJ题——11.随机链表的复制

11.随机链表的复制

138. 随机链表的复制 - 力扣(LeetCode)

复制代码
/*
解题思路:
此题可以分三步进行:
1.拷贝链表的每一个节点,拷贝的节点先链接到被拷贝节点的后面
2.复制随机指针的链接:拷贝节点的随机指针指向被拷贝节点随机指针的下一个位置
3.拆解链表,把拷贝的链表从原链表中拆解出来
*/
复制代码
class Solution {
public:
    Node* copyRandomList(Node* head) {
        // 1.拷贝链表,并插入到原节点的后面
        Node* cur = head;
        while(cur)
        {
            Node* next = cur->next;

            Node* copy = (Node*)malloc(sizeof(Node));
            copy->val = cur->val;

            // 插入
            cur->next = copy;
            copy->next = next;

            // 迭代往下走
            cur = next;
        }

        // 2.置拷贝节点的random
        cur = head;
        while(cur)
        {
            Node* copy = cur->next;
            if(cur->random != NULL)
                copy->random = cur->random->next;
            else
                copy->random = NULL;

            cur = copy->next;
        }

        // 3.解拷贝节点,链接拷贝节点
        Node* copyHead = NULL, *copyTail = NULL;
        cur = head;
        while(cur)
        {
            Node* copy = cur->next;
            Node* next = copy->next;

            // copy解下来尾插
            if(copyTail == NULL)
            {
                copyHead = copyTail = copy;
            }
            else
            {   
                copyTail->next = copy;
                copyTail = copy;
            }

            cur->next = next;

            cur = next;
        }

        return copyHead;
    }
};
相关推荐
额鹅恶饿呃9 小时前
C语言中的数据结构和变量
c语言·数据结构·算法
万法若空11 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表
tachibana211 小时前
hot100 翻转二叉树(226)
java·数据结构·算法·leetcode
兰令水11 小时前
leecodecode【面试150】【2026.7.9打卡-java版本】
java·数据结构·leetcode·面试·职场和发展
A.零点13 小时前
期末复习,408考研数据结构:第一章绪论完整知识梳理与真题深度解读
c语言·数据结构·笔记·考研
阿文的代码库14 小时前
经典算法题剖析:按奇偶排序数组
数据结构·算法
玛卡巴卡ldf17 小时前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣
Yang_jie_0319 小时前
笔记:数据结构(链队列的相关判断条件)
数据结构·笔记
zmzb010320 小时前
C++课后习题训练记录Day154
数据结构·c++·算法
万法若空1 天前
【算法-查找】查找算法
java·数据结构·算法