复杂链表的复制(java)
问题描述
时间输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),
返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
题解
/*
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)
{
cloneNodes(pHead);
cloneRandom(pHead);
return ReConnectNode(pHead);
} private void cloneNodes(RandomListNode pHead){
RandomListNode pNode=pHead;
while(pNode!=null){
RandomListNode randomListNode=new RandomListNode(pNode.label);
randomListNode.next=pNode.next;
pNode.next=randomListNode;
pNode=randomListNode.next;
}
} private void cloneRandom(RandomListNode pHead){
RandomListNode pNode=pHead;
while(pNode!=null){
System.out.println(pNode.label);
if(pNode.random!=null){
pNode.next.random=pNode.random.next;
}else{
pNode.next.random=null;
}
pNode=pNode.next.next;
}
} public static RandomListNode ReConnectNode(RandomListNode pHead){
RandomListNode node = pHead;
RandomListNode pCloneHead = null;
RandomListNode pCloneNode = null;
if(node!=null){
pCloneHead = pCloneNode = node.next;
node.next = pCloneHead.next;
node = node.next;
}
while(node!=null){
pCloneNode.next = node.next;
pCloneNode = pCloneNode.next;
node.next = pCloneNode.next;
node = node.next;
}
return pCloneHead;
}
}
复杂链表的复制(java)的更多相关文章
- 《剑指offer》面试题26 复杂链表的复制 Java版
(定义一个新的数据结构,每个节点除了具有普通链表的next域外,还有一个额外的引用指向任意节点.我们要对由该特殊数据结构形成的链表进行复制.) 我的方法:也就是克隆一个这种特殊链表,很快想到先不考虑原 ...
- 【Java】 剑指offer(35) 复杂链表的复制
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现函数ComplexListNode* Clone(Compl ...
- 链表面试题Java实现【重要】
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Java链表基本操作和Java.util.ArrayList
Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题“从尾到头打印链表”,具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个A ...
- 剑指offer-第四章解决面试题思路(复杂链表的复制)
题目:请写一个函数clone(ComplexListNode pHead),实现复杂链表的复制. 复杂链表的数据结构如下:public class ComplexListNode{int m_nVal ...
- 【Offer】[35] 【复杂链表的复制】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的he ...
- 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 Offer_35 题目详情 方法一 可以使用一个HashMap来存储旧结点和新结点的映射. 这种方法需要遍历链表两遍,因为需要首先知道映射关系才能求出next ...
- 剑指Offer面试题:24.复杂链表的复制
一.题目:复杂链表的复制 题目:请实现函数ComplexListNode Clone(ComplexListNode head),复制一个复杂链表.在复杂链表中,每个结点除了有一个Next指针指向下一 ...
- (剑指Offer)面试题26:复杂链表的复制
题目: 请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表. 在复杂链表中,每个结点除了有一个pNext指针指向下一个结点之外,还 ...
- 剑指Offer24 复杂链表的复制
/************************************************************************* > File Name: 24_Comple ...
随机推荐
- Windows下生成自签名证书
最近通过openssl生成了自签名的证书,总结成下面这张图. 说明:下载openssl0.9.8之后解压,然后运行bin\openssl.exe进入openssl运行环境,然后按上图中顺序执行命令.( ...
- php 常用方法
//返回json数据给js function json_output($err_code = 0 , $error_message = '' , $data = [] , $redirect = '' ...
- cowboy动态页面的例子
cowboy的动态页用的是erlydtl,需要先安装erlydtl模板引擎,或者你在dep里面添加 创建工程 rebar-creator create-app testCowboy testCowbo ...
- Socket服务端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- 关于PIC和FPGA
PIC:Peripheral Interface Controller. FPGA:Field Programmable Gate Array. 关于二者: 区别: FPGA是逻辑门器件,可以配置成为 ...
- java代码-----运用endWith()和start()方法
总结: package com.a.b; //startWith().和endWith()是检查一个字符串是否以一个特定的字符序列开始或结束 public class Sdfs { public st ...
- MySQL添加数据库的唯一索引的几种方式~
创建表时直接设置: DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `stu_id` int(11) NOT NULL AUTO_IN ...
- 在linux下使用debugfs恢复rm删除的文件
原理主要是删除的文件并没有实际上从硬盘上摸去,只是inode索引删除了相关的信息,因此只要找到刚删除文件的block上,就可以恢复已经删除的文件. 以下方法在ext3的文件系统上测试通过,ext2的没 ...
- Pathway富集分析气泡图
data.tsv > pathway = read.table("data.tsv",header = T, sep="\t") > library ...
- 爬虫中urllib库
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...