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

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

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
 
这个题有两种解法,第一种是用hashmap把原表random(随机指针)对应存起来,再复原,可是这个空间复杂度太高
第二种方法,把原链表的a-b-c-d变成 a-a1-b-b1-c-c1-d-d1这样,a1的random指针应该指向a指针指向的位置的下一个位置(很好理解)
 
注意:一定要先将a-b-c-d变成 a-a1-b-b1-c-c1-d-d1,再进行随机指针的变更,(把所有的next指针调好了,再调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)    {        RandomListNode Head=pHead;        if(pHead==null){            return null;        }        RandomListNode cur=pHead;        RandomListNode next=pHead;        while(cur!=null){            next=cur.next;            cur.next=new RandomListNode(cur.label);            cur.next.next=next;            cur=next;        }                cur=pHead;        next=pHead;        while(cur!=null){            cur.next.random=cur.random==null?null:cur.random.next;            cur=cur.next.next;;        }        RandomListNode pHead1=Head.next;        while(Head!=null){            next=Head.next.next;            Head.next.next=next==null?null:next.next;            Head.next=next;            Head=next;        }        return pHead1;    }}

 

转载于:https://www.cnblogs.com/tobemaster/p/5903669.html

你可能感兴趣的文章
find_in_set()和in()比较
查看>>
我的友情链接
查看>>
Openstack 云计算 (一): kvm 虚拟机配置
查看>>
我的友情链接
查看>>
CentOS下载地址
查看>>
第二阶段团队进展报告(1)
查看>>
Linux 下的安装(源码包和RPM 包)软件包的命令方法
查看>>
如何确定一个网站是用Wordpress开发的
查看>>
小程序错误TypeError: __webpack_require__
查看>>
云计算每周之“红黑榜”
查看>>
我的友情链接
查看>>
samba服务搭建与配置
查看>>
我的友情链接
查看>>
wdcp 安装
查看>>
C语言运算符优先级相关问题
查看>>
MP4视频播放器代码
查看>>
Nginx 匹配 iphone Android 微信
查看>>
MFC_Combo_Box(组合框)控件的用法
查看>>
ldap
查看>>
我的友情链接
查看>>