剑指offer-复杂链表的复制
题目描述
public RandomListNode Clone(RandomListNode pHead)
{//链表 my
RandomListNode head = new RandomListNode(0);
RandomListNode pre = head;
RandomListNode cur =null;
RandomListNode pCur = pHead;
//构建链表及next
while(pCur!=null){
cur = new RandomListNode(pCur.label);
pre.next = cur;
pre = pre.next;
pCur = pCur.next;
}
//构建链表random
pCur = pHead;//原链表遍历
cur = head.next;
while(pCur!=null){
RandomListNode random = pCur.random;
if(random!=null){
RandomListNode randompCur =pHead;
RandomListNode randomCur = head.next;
while(randompCur!=null){
if(randompCur==random){
cur.random = randomCur;
break;
}
randompCur = randompCur.next;
randomCur = randomCur.next;
}
}
pCur = pCur.next;
cur = cur.next;
}
return head.next;
}
方法二:首先在旧链表中创建新链表,在每个结点后插入一个复制结点;然后处理每个结点的random指针;最后拆分链表。时间复杂对为O(n);
public RandomListNode Clone(RandomListNode pHead)
{//链表 mytip
RandomListNode head = new RandomListNode(0);
RandomListNode cur =null;
RandomListNode pCur = pHead;
//遍历链表,在每个结点pCur后面插入pCur的复制结点cur
while(pCur!=null){
cur = new RandomListNode(pCur.label);
cur.next = pCur.next;
pCur.next = cur;
pCur = cur.next;
}
//遍历链表,复制每个结点pCur的random指针
pCur = pHead;
while(pCur!=null){
RandomListNode random = pCur.random;
if(random!=null){
pCur.next.random = random.next;
}
pCur = pCur.next.next;
}
//拆分链表
pCur = pHead;
cur = head;
while(pCur!=null){
cur.next = pCur.next;
cur = cur.next;
pCur.next = cur.next;
pCur = pCur.next;
}
return head.next;
}
剑指offer-复杂链表的复制的更多相关文章
- 剑指Offer——复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...
- 剑指offer 复杂链表的复制 (有向图的复制)
时间复杂度O(3N) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...
- 用js刷剑指offer(复杂链表的复制)
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...
- 《剑指offer》 链表中倒数第k个节点
本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...
- 剑指Offer:链表中环的入口节点【23】
剑指Offer:链表中环的入口节点[23] 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 第一步确定链表中是否包含环,怎么确定呢?我们定义两个指针橙和 ...
- 剑指Offer:链表中倒数第k个结点【22】
剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为 ...
- 剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点 Offer 22 常规解法 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可. package com.walega ...
- 力扣 - 剑指 Offer 22. 链表中倒数第k个节点
题目 剑指 Offer 22. 链表中倒数第k个节点 思路1(栈) 既然要倒数第k个节点,那我们直接把所有节点放到栈(先进后出)里面,然后pop弹出k个元素就可以了 代码 class Solution ...
- 【剑指Offer】链表中倒数第k个节点 解题报告(Python)
[剑指Offer]链表中倒数第k个节点 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 【剑指Offer】链表中环的入口结点 解题报告(Python)
[剑指Offer]链表中环的入口结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
随机推荐
- Python 获得最近一个月的每天的日期
直接上代码: #coding:utf-8 # from common.contest import * import datetime import time begin_date = (dateti ...
- UBANTU zongjie
1.fatal error: openssl/aes.h: No such file or directory 要在Debian.Ubuntu或者其他衍生版上安装OpenSSL: $ sudo apt ...
- FFmpeg: FFmepg中的sws_scale() 函数分析
FFmpeg中的 sws_scale() 函数主要是用来做视频像素格式和分辨率的转换,其优势在于:可以在同一个函数里实现:1.图像色彩空间转换, 2:分辨率缩放,3:前后图像滤波处理.不足之处在于:效 ...
- Asp.Net百度站长工具的主动推送功能
public static string PostUrl(string[] urls) { try { string formUrl = "http://data.zz.baidu.com/ ...
- hdfs 安全模式介绍
1. hdfs在启动的时候现将映像载入内存,并执行edits中的各项操作,一旦在内存中建立元数据的映像,则闯进啊一个新的fsimage文件和空的编辑日志.此时namenode开始监听datanode请 ...
- java通过jdbc访问mysql,update数据返回值的思考
java通过jdbc访问mysql,update数据返回值的思考 先不说那么多,把Java代码贴出来吧. public static void main(String[] args) throws I ...
- Java对象序列化全面总结
前言 Java允许我们在内存中创建可复用的Java对象,但一般情况下,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中,可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重 ...
- MyEclipse 修改项目部署路径
就Tomcat来说,MyEclipse默认是使用安装目录下的webapps目录作为部署路径,比如你在设置中为Tomcat选择的根目录是D:\wwwroot,如图所示: 那么在选择Tomcat作为服务器 ...
- TeamViewer 版本v13.2.26558 修改ID
TeamViewer 使用频繁后会被判定为商业用途,不可用.此软件的账号和设备mac地址绑定. 修改TeamViewer ID后可以重新开始使用.下述方法可以成功修改TeamViewer ID. Wi ...
- 公开的免费WebService接口分享
天气预报Web服务,数据来源于中国气象局 Endpoint Disco WSDL IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据) Endpoint Disco WSDL 随机英文 ...