博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复杂链表的复制
阅读量:4091 次
发布时间:2019-05-25

本文共 1378 字,大约阅读时间需要 4 分钟。

 

一、问题描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

 

二、代码实现

/*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;        }                // 1、插入新节点,将副本节点查到原节点的后面(这是第二步的关键)        RandomListNode cur = pHead;        while (cur != null) {            RandomListNode clone = new RandomListNode(cur.label);            clone.next = cur.next;            cur.next = clone;            cur = clone.next;        }                // 2、建立新节点的 random 链接,将副本节点的random指针指向原节点的random指针所指向的节点的下一个节点        cur = pHead;        while (cur != null) {            RandomListNode clone = cur.next;            if (cur.random != null) {                clone.random = cur.random.next;            }            cur = clone.next;        }                // 3、拆分,将所有副本节点分离出来,分成原链表和新链表        //通过不断地让当前节点跟其下一个节点一样指向下下个节点,来使得奇数位置、偶数位置的节点各自连成一个链表        cur = pHead;        RandomListNode pCloneHead = pHead.next;        while (cur.next != null) {            RandomListNode next = cur.next;            cur.next = next.next;            cur = next;        }        return pCloneHead;    }}

 

转载地址:http://vfnii.baihongyu.com/

你可能感兴趣的文章
再见,Eclipse...
查看>>
超全汇总!B 站上有哪些值得学习的 AI 课程...
查看>>
网络协议那些事儿,每一个程序员的必备知识,这次终于理顺了!
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
神器面世:让你快速在 iOS 设备上安装 Windows、Linux 等操作系统!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
新加坡总理的儿子,写了一本计算机入门书籍...
查看>>
教你如何用 19 行代码搭建一个女朋友!
查看>>
学不会设计模式,是因为你还没用过这个神奇的网站!
查看>>
用 Python 写出 Gameboy 模拟器,这位丹麦小哥的大学项目火了!
查看>>
GitHub 热榜:人像卡通化!
查看>>
如果你觉得学习 Git 很枯燥,那是因为你还没玩过这款游戏!
查看>>
太赞了,《快乐学 Pandas》中文教程已正式开源!
查看>>
未来 10 年,软件开发技术的 8 个发展趋势
查看>>
GitHub 标星 2.3w+!这个开源的 Java 网络通信框架究竟有多牛逼...
查看>>
GitHub 热榜:用 Zoom 开会很无聊?赶紧试下这个会议换脸神器!
查看>>
写一个开源的 macOS 软件可以赚多少钱?
查看>>
太强了!成功打入 RTC 2020 编程挑战赛决赛圈的选手,到底有多秀...
查看>>
又一神书面世:《无需计算机的计算机科学》!
查看>>
微信支付的软件架构究竟有多牛逼...
查看>>