当前位置: 首页 > news >正文

复制带随机指针的链表


struct Node
{
    int val;
    struct Node* next;
    struct Node* random;
};
struct Node* copyRandomList(struct Node* head)
{
    struct Node* cur = head;
    //copy结点并插入原链表结点后面
    while (cur)
    {
        //创建新结点
        struct Node* copy = (struct Node*)malloc(sizeof(struct Node));
        //复制结点的值
        copy->val = cur->val;
        //新节点插入源链表
        copy->next = cur->next;
        cur->next = copy;
        //cur迭代往后遍历
        cur = copy->next;
    }
    //根据原结点的random处理copy的random
    cur = head;
    while (cur)
    {
        //copy指向复制链表的起点
        struct Node* copy = cur->next;
        if (cur->random == NULL)
        {
            copy->random = NULL;
        }
        //copy->random指向cur->random指向的结点的下一个结点,即next,
        // 通过桥接,使复制链表的random指向的位置于原链表相同
        else
        {
            copy->random = cur->random->next;
        }
        //cur迭代往后
        cur = copy->next;
    }
    //解开原链表和复制链表,还原原链表,链接复制的链表
    cur = head;//原链表的当前结点位置
    struct Node* copyHead = NULL, * copyTail = NULL;//复制链表的头尾
    while (cur)
    {
        struct Node* copy = cur->next;//复制链表的当前位置随着cur往后迭代
        struct Node* next = copy->next;//原链表的下一个结点位置随着cur也往后迭代
        if (copyHead == NULL)//第一个结点
        {
            copyHead = copyTail = copy;
        }
        else//尾插
        {
            copyTail->next = copy;//复制链表的链接
            copyTail = copy;//tial往后移到copy的位置
        }
        cur->next = next;//原链表还原
        cur = next;//cur往后移到next的位置
    }
    return copyHead;
}


http://www.mrgr.cn/news/4968.html

相关文章:

  • Hadoop入门基础(一):深入探索Hadoop内部处理流程与核心三剑客
  • 笔记本电脑无线网卡突然没有了
  • Git工具详细使用教程
  • 未定义行为
  • 指针的学习和理解
  • SQL - 创建 表和数据库
  • Swoole 和 Java 哪个更有优势呢
  • 大数据开发工程师面试整理-大数据技术栈
  • gRPC主要特点
  • 新手如何找到正确入行 Web3 路径?揭开职业启航新篇章
  • XSS基本原理与注入方式
  • 嵌入式C语言中函数宏基本操作方法
  • EXCEL——Vlookup17个高级用法
  • 线性代数证明:若行列式的某一行(列)的元素都是两数之和,则可以把行列式拆成两个行列式之和
  • 基于UDP的TFTP文件传输
  • File的常见成员方法(获取并遍历)
  • 【Rust光年纪】提高开发效率:深入了解Rust语言中的数据库客户端和文件处理库
  • Pyramid学习笔记
  • 关于AR在医疗领域创新应用
  • 2024年4款高质量的英语翻译工具推荐!