Leetcode Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

对于这道题最开始用的是用一个数组存储新建的节点,然后对random的索引时比较快。

后来在网上看到人家的一种很奇特的方法,觉得也很好。

1.首先复制每一个节点,并把它插入到该节点的直接后继,这样就构成了一个新链表,链表长度为原来的二倍,同时每个节点有两个复制。

2.之后修改random域,new1->random = old1->random->next

3.将链表拆分成两个,old1->next = old1->next->next,  new1->next = new1->next->next

此时的时间复杂度为O(n)

 1 package Copy.List.with.Random.Pointer;
 2 
 3 public class ListRandomPointer1 {
 4      public RandomListNode copyRandomList(RandomListNode head) {
 5          RandomListNode index=head;
 6          if(head==null) return null;
 7          while(index!=null){
 8             RandomListNode node=new RandomListNode(index.label); 
 9             RandomListNode temp=index.next;            
10             node.next=temp;
11             index.next=node;
12             index=temp;
13          }
14          index=head;
15          while(index!=null){
16           if(index.random==null){
17               index.next.random=null;
18           }else{
19           index.next.random=index.random.next;
20           }
21           index=index.next.next;
22          }
23          index=head;
24          RandomListNode head2=head.next;
25          RandomListNode index2=head2;
26          while(index!=null){
27             index.next=index2.next;
28             if(index2.next!=null)
29             index2.next=index2.next.next;
30             index=index.next;
31             if (index != null) {  
32                 index2 = index.next;  
33             }  
34          }
35          return head2;
36      }
37     
38 
39 }

 

转载于:https://www.cnblogs.com/criseRabbit/p/4117608.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sharepoint 2007页面显示真实的错误信息

打开下面path的web.config文件:C:\Program Files\Common Files\Microsoft Shared\Web ServerExtensions\12\TEMPLATE\LAYOUTS修改&#xff1a;<system.web>... <customErrors mode"Off" />...</system.web>如果没有就添加&#xff1a;<SharePoi…

Shell循环(for,while,until,break与continue)

以下内容源于C语言中文网的学习与整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、for循环 for循环一般格式为&#xff1a; for 变量 in 列表 docommand1command2...commandN done 列表是一组值&#xff08;数字、字符串等&#xff09;组成的序列&#xff0c;每个值通过…

业界重磅新书《UNIX/Linux网络日志分析与流量监控》首发

《UNIX/Linux网络日志分析与流量监控》出版社官网&#xff1a; http://www.cmpbook.com/stackroom.php?id39384 每本图书附赠51CTO学院的价值100元学习卡一张京东&#xff1a;http://item.jd.com/11582561.html机械工业出版社在线购书平台&#xff1a;http://www.golden-book.…

Git工具使用基础

Git 是一个分布式的版本控制工具&#xff0c;本篇文章从介绍Git开始&#xff0c;重点在于介绍Git的基本命令和使用技巧&#xff0c;让你尝试使用Git的同时&#xff0c;体验到原来一个版 本控制工具可以对开发产生如此之多的影响&#xff0c;文章分为两部分&#xff0c;第一部分…

Shell case esac语句

以下内容源于C语言中文网的学习与整理&#xff0c;如有侵权&#xff0c;请告知删除。 case语句格式 case 值 in 模式1)command1command2command3;; 模式2&#xff09;command1command2command3;; *)command1command2command3;; esac 取值后面是关键字 in。取值可以为变量或常数…

Shell test命令

以下内容源于C语言中文网的学习与整理&#xff0c;如有侵权&#xff0c;请告知删除。 Shell中的 test 命令用于检查某个条件是否成立&#xff0c;它可以进行数值、字符和文件三个方面的测试。这其实相当于一个中括号&#xff1f; 一、数值测试 参数说明-eq等于则为真-ne不等于…

DDOS的攻击原理和防护指南

我们现在来分析DDOS的攻击原理。 首先&#xff0c;DDOS是英文Distributed Denial of Service的缩写&#xff0c;意思是分布式拒绝服务。拒绝服务又是什么意思呢&#xff1f;就是采取一些垃圾数据包来阻塞网站的网络通道&#xff0c;导致让网站不能正常访问。分布式服 务拒绝攻击…

Python基础笔记,后续更新

1,避免‘\n’等特殊字符的两种方式&#xff1a;1&#xff0c;利用转义字符‘\’2&#xff0c;利用原始字符‘r’ print rc:\now3,字符串中嵌入双引号等特殊符号1&#xff0c;利用转义字符‘\’2&#xff0c;使用单引号括起这个字符串 print (i l"o"ve fis.com)2…

.NET:如何让线程支持超时?

背景 本文是为了回复博客园一个兄弟的问题&#xff0c;主要回答两个问题&#xff1a; 如何让线程支持超时&#xff1f;如何让线程在执行结束后销毁&#xff1f;MS 现在不推荐使用低级别的 Thread 编程&#xff0c;而推荐使用 Task&#xff0c;另外我多数情况都是做企业应用&…

第1章 Express MongoDB 搭建多人博客

学习环境 Node.js &#xff1a; 0.10.22 Express &#xff1a; 3.4.4 MongoDB &#xff1a; 2.4.8 快速开始 安装 Express express 是 Node.js 上最流行的 Web 开发框架&#xff0c;正如他的名字一样&#xff0c;使用它我们可以快速的开发一个 Web 应用。我们用 express 来搭…

用UltraISO制作的u盘ubuntu11.04,启动失败解决方案

错误提示&#xff1a;SYSLINUX 3.84 2009-12-18 EBIOS Copyright c 1994-2009 H.Peter Anvin et al 折腾的很久&#xff0c;尝试用Pauly的bootice&#xff0c;结果可以从u盘启动了。 先用UltraISO制作好u盘ubuntu11.04。 下载bootice&#xff0c;把u盘插上去&#xff0c;打开软…

ATT汇编与Intel汇编区别

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 Linux 汇编语言开发指南 Intel 格式&#xff0d;&#xff0d;AT&T 格式_51CTO博客_at&t和intel汇编语法 前言 X86汇编语言有两种语法风格&#xff0c;即Intel汇编风格和AT&T汇编风格。…

Windows Phone 8初学者开发—第7部分:本地化应用程序

Windows Phone 8初学者开发—第7部分&#xff1a;本地化应用程序 原文 Windows Phone 8初学者开发—第7部分&#xff1a;本地化应用程序 第7部分:本地化应用程序 原文地址&#xff1a; http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Pa…

linux shell 上传,下载ftp文件

#####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bash ftp -n<<! open 192.168.1.171 user guest 123456 binary cd /home/data lcd /home/databackup promptmget *close bye ! 2. ftp自动登录上传文件。 ####本地的/home/databackup to ftp服务器…

ARM官方汇编指令

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;文档《ARM汇编指令集汇总》 &#xff08;2&#xff09;文档《ARM汇编手册》 &#xff08;3&#xff09;文档《ARM Software Development Toolkit User Guide》 内容总结…

C# 使用printDocument1.Print打印时不显示 正在打印对话框(里面还有一个讨厌的取消按钮)...

C#使用printDocument1.Print打印时不显示正在打印对话框有两种方法 第一种&#xff0c;使用PrintController PrintController printController new StandardPrintController(); printDocument1.PrintController printController; printDocument1.Print(); 第二种&am…

audio 标签简介

定义和用法 <audio> 标签定义声音&#xff0c;比如音乐或其他音频流。 实例 一段简单的 HTML 5 音频&#xff1a; <audio src"someaudio.wav"> 您的浏览器不支持 audio 标签。 </audio> 提示和注释 提示&#xff1a;可以在开始标签和结束标签之间放…

合法立即数与非法立即数

ARM指令都是32位&#xff0c;除了指令标记和操作标记&#xff0c;本身只能附带很少位数的立即数。因此立即数有合法和非法之分。 合法立即数&#xff1a;经过任意位数的移位后非零部分可以用8位表示的即为合法立即数。 ldr伪指令可以不用人为去判断合法立即数。

magento 瘦身数据库

2019独角兽企业重金招聘Python工程师标准>>> 2013/4/1更新 有两种方式&#xff0c;一种在后台设置自动清除log数据 System > Configuration > Advanced > System 打开 Log Cleaning 还有一种自然是直接清理数据库 truncate dataflow_batch_export; truncat…

GNU汇编程序中某些符号的含义

&#xff08;1&#xff09; 或者 # 或者 /**/ 用来做注释。可以在行首也可以在代码后面同一行直接跟&#xff0c;和C语言中//类似。 #用来做注释&#xff0c;一般放在行首&#xff0c;表示这一行都是注释而不是代码。 /**/也可以用来做注释。 &#xff08;2&#xff09;冒号&am…