复杂链表的深度复制
时间:2020-05-16
本文章向大家介绍复杂链表的深度复制,主要包括复杂链表的深度复制使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
分析:直接以一个链表上进行操作。
(1)对原链表的每一个节点进行深复制,并插在源节点的后面。
(2)根据源节点的指针指向对新节点进行引导链接
(3)拆分链表——奇数位为源链表节点,偶数位clone链表节点
code:
/* * 借鉴别人的思想:原链表中,在每个节点后复制一个新节点 * 奇数节点构成老链表序列,偶数节点构成新链表序列 */ public RandomListNode Clone(RandomListNode pHead){ if(pHead==null) { return null; } RandomListNode currentNode = pHead; //复制老节点,并连接在原节点的后面 while(currentNode!=null) { RandomListNode cloneNode = new RandomListNode(currentNode.label); cloneNode.next = currentNode.next; currentNode.next = cloneNode; currentNode = cloneNode.next; } //为新链表设置random指向。 currentNode = pHead; //重置为头结点 while(currentNode!=null) { currentNode.next.random = currentNode.random == null?null:currentNode.random.next; currentNode = currentNode.next.next; } //将当前序列拆分为老链表和新链表 //获得各自的头结点 /* * RandomListNode newHead = pHead.next; RandomListNode newAgent = newHead; * currentNode=pHead; currentNode.next = newAgent.next; currentNode = * currentNode.next; * * //处理后续节点 * while(currentNode!=null) { newAgent.next = currentNode.next; * newAgent = newAgent.next; currentNode = newAgent.next; * * } return newHead; */ currentNode = pHead; RandomListNode pCloneHead = pHead.next; while(currentNode != null) { RandomListNode cloneNode = currentNode.next; currentNode.next = cloneNode.next;
//我在此语句卡住了很久 cloneNode.next = cloneNode.next==null?null:cloneNode.next.next; currentNode = currentNode.next; } return pCloneHead; } public static class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } }
原文地址:https://www.cnblogs.com/dream-flying/p/12900143.html
- 让ZeGraph在X方向上填满
- 中国区块链技术和产业发展论坛举行——区块链应用发展尚需时日
- silverlight获取外部数据的另一种选择:FluorineFx
- 存储状态数据
- Oracle数据库设置为归档模式的操作方法
- flash/flex 与 FluorineFx通讯之Hello World!
- 苹果CEO首次泄露出自动驾驶汽车的相关战略信息
- Linux下绑定网卡的操作记录
- flash开发中如何实现界面代码分离
- flex中使用swc实现更好的界面代码分离
- Redis Cluster集群总结性梳理
- jquery的html,text,val
- Redis Cluster日常操作命令梳理
- MongoDB数据存储-深入了解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法