Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >复杂链表的复制

复杂链表的复制

作者头像
砖业洋__
发布于 2023-05-06 11:24:34
发布于 2023-05-06 11:24:34
14700
代码可运行
举报
文章被收录于专栏:博客迁移同步博客迁移同步
运行总次数:0
代码可运行

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

题目链接:https://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba?tpId=13&tqId=11178&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

分析:

注意,原来的链表也要分离出来,虽然不是题目要求,但是既然是复制,肯定是要额外的一条链表,不能破坏原来链表。

AC代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
public class RandomListNode {
    int label;
    RandomListNode next = null;
    RandomListNode random = null;

    RandomListNode(int label) {
        this.label = label;
    }
}
*/
public class Solution {
    public RandomListNode Clone(RandomListNode pHead)
    {
        if (pHead == null)    return null;
        RandomListNode p = pHead;
        while (p != null) {
            RandomListNode node = new RandomListNode(p.label);
            node.next = p.next;
            p.next = node;
            p = node.next;
        }
        p = pHead.next;
        RandomListNode last = pHead;
        while (p != null) { // 可能random指向自己,或者一个不在链表中的结点
            p.random = last.random == null ? null : last.random.next;
            last = p.next;
            p = last == null ? null : last.next;
        }
        RandomListNode curHead = pHead.next;
        last = pHead;
        p = curHead;
        while (p!= null) {
            last.next = p.next;
            last = p.next;
            p.next = last == null ? null : last.next;
            p = p.next;
        }
        return curHead;
    }
}

测试点可能为{1,2,3,4,5,3,5,#,2,#} ,#代表null,链表可能1-2-3-4-5-3-5,#,2,#,这3个结点可能是非链表结点,但是是random指向的结点。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
每天一道剑指offer-两个链表的第一个公共结点
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/01/09
3790
二叉搜索树转化成双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
砖业洋__
2023/05/06
1530
二叉搜索树转化成双向链表
每天一道剑指offer-二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
乔戈里
2019/09/17
2790
每天一道剑指offer-二叉搜索树与双向链表
每天一道剑指offer-链表中环的入口结点
考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默响起来一个声音:”乔戈里峰” 题目 每天一道剑
乔戈里
2019/01/28
3430
每天一道剑指offer-二叉树中和为某一值的路径
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/09/17
2930
每天一道剑指offer-二叉树中和为某一值的路径
剑指offer No.40 数组中只出现一次的数字
https://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811?tpId=13&tqId=11193&tPage=2&rp=2&r
week
2020/04/27
3240
每天一道剑指offer-二叉搜索树的后序遍历序列
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/09/17
2790
每天一道剑指offer-二叉搜索树的后序遍历序列
剑指offer No.21 栈的压入,弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=11174&tPage=2&rp=2&r
week
2022/11/26
2320
每天一道剑指offer-把数组排成最小的数
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/09/17
3890
每天一道剑指offer-连续子数组的最大和
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/09/17
2910
每天一道剑指offer-连续子数组的最大和
每天一道剑指offer-数字在排序数组中出现的次数
每天一道剑指offer-数字在排序数组中出现的次数 https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13
乔戈里
2019/01/07
3280
每天一道剑指offer-数组中出现次数超过一半的数字
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/09/17
3250
每天一道剑指offer-数组中出现次数超过一半的数字
判断是否为二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
砖业洋__
2023/05/06
1300
每天一道剑指offer-最小的K个数
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。
乔戈里
2019/09/17
3290
每天一道剑指offer-最小的K个数
每天一道剑指offer-第一个只出现一次的字符
题目 每天一道剑指offer-第一个只出现一次的字符 https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=
乔戈里
2019/09/17
2860
最小的K个数(手写大顶堆和用优先级队列比较)
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
砖业洋__
2023/05/06
2680
第一个只出现一次的字符(使用hashmap和使用位图)
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
砖业洋__
2023/05/06
2070
剑指offer No.18 二叉树的镜像
https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011?tpId=13&tqId=11171&tPage=1&rp=1&r
week
2022/11/26
2710
剑指offer No.18 二叉树的镜像
每天一道剑指offer-数组中只出现一次的数字
考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默响起来一个声音:”乔戈里峰”
乔戈里
2019/01/23
3890
每天一道剑指offer-孩子们的游戏(圆圈中最后剩下的数)
Java实现的话,可以使用LinkedList,考虑删除节点的效率。模拟游戏过程即可:其实这是个约瑟夫环问题,但是绝对没必要去死记硬背数学公式,直接用链表模拟游戏过程即可。
乔戈里
2019/01/28
8930
推荐阅读
相关推荐
每天一道剑指offer-两个链表的第一个公共结点
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验