数据结构(7)单链表算法题OVA

随机链表的复制

1、题目描述

https://leetcode.cn/problems/copy-list-with-random-pointer

2、思路分析

第一步、在原链表的基础上拷贝节点

第二步、置random指针

只要节点不为空,那么就满足以下这个结论:copy -> random = cur -> random -> next

第三步、断开新旧链表

定义指针pcur指向原链表的头结点,用来遍历整个链表,再定义拷贝链表的头尾指针copyHead和copyTail。

3、参考代码

cpp 复制代码
/**
 * Definition for a Node.
 * struct Node {
 *     int val;
 *     struct Node *next;
 *     struct Node *random;
 * };
 */
typedef struct Node Node;
Node* buyNode(int x)
{
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->val = x;
    newNode->next = newNode->random = NULL;

    return newNode;
}
void AddNode(Node* head)
{
    Node* pcur = head;
    while(pcur)
    {
        Node* newnode = buyNode(pcur->val);
        Node* next = pcur->next;
        newnode->next = next;
        pcur->next = newnode;
        pcur = next;
    }
}
void setRandom(Node* head)
{
    Node* pcur = head;
    while(pcur)
    {
        Node* copy = pcur->next;
        if(pcur->random)
        {
            copy->random = pcur->random->next;
        }
        pcur = copy->next;
    }
}
struct Node* copyRandomList(struct Node* head) 
{
    if(head == NULL)
    {
        return head;
    }
	//在原链表的基础上拷贝节点并插入到原链表中
    AddNode(head);
    //设置random指针
    setRandom(head);
    //断开新链表
    Node* pcur = head;
    Node* copyHead, *copyTail;
    copyHead = copyTail = pcur->next;
    while(copyTail->next)
    {
        pcur = copyTail->next;
        copyTail->next = pcur->next; 
        copyTail = copyTail->next;
    }
    return copyHead;
}
相关推荐
wuyk5555 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴5 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
疯狂打码的少年6 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs6667 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
凉茶钱7 小时前
【数据结构】堆的应用
c语言·数据结构
间歇性努力持续性发呆的野生快乐选手8 小时前
栈的性质(进栈,出栈,访问)
数据结构·c++
m0_547486668 小时前
《数据结构与算法》全套PPT课件2026(中国海洋大学)
数据结构·算法
旖旎夜光9 小时前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
我变成萤火虫11 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
白狐_79811 小时前
408数据结构第7章:B树①——基础概念与结构
数据结构·b树