当前位置: 首页 > news >正文

南浔区住房和城乡建设局网站WordPress电影评分模板

南浔区住房和城乡建设局网站,WordPress电影评分模板,龙岩特色,抖音生活服务旅行社ota入驻复杂链表的复制 题目#xff1a;实现一个函数complexListNode 复制一个复杂链表。在链表中#xff0c;每个节点除了有一个next指针指向下一个节点#xff0c;还有另外一个before节点#xff0c;before节点指向链表中任意一个节点#xff0c;或者null节点。链表节点定义使…复杂链表的复制 题目实现一个函数complexListNode 复制一个复杂链表。在链表中每个节点除了有一个next指针指向下一个节点还有另外一个before节点before节点指向链表中任意一个节点或者null节点。链表节点定义使用之前文章 数据结构与算法–链表实现以及应用 中链表节点的定义以及链表中其他方法实现都沿用以上文章中有详细的说明。如下节点定义 public class ListNode implements ComparableListNode {private Integer value;private ListNode next;private ListNode before; ...... }如下图中包含的5个阶段的复杂链表图中实线箭头表示next指针虚线表示before指针简单画出如下我们省略了null指针没有画出来 分析 方法一如上链表的结构看最简单的方式先遍历一次将节点复制并且用next 链接节点得到基础结构在循环查找每一个节点的before节点因为此处before节点是随机指向可能指向本节点之前的节点因此每次都需要遍历一次链表来查找对应的节点信息时间复杂度O(N2)方法二为了避免before节点查找的复杂性先遍历一次oldList复制next指针并且将oldNodenewNode存储到map中第二次遍历此时我们已经知道了oldNode~ newNode的对应关系我们在查找到oldList的before指向的时候直接从map中获取到对应newNode这样通过O1 时间获取到before的值此处空间换时间的方法方法三换一种思路能否不用辅助空间情况下来实现O(n)的时间复杂度第一次遍历直接将访问到的节点复制新节点并且插入到访问到的节点后面如下图 第二次遍历设置新建节点的before节点因为每个新节点A‘都在老节点A的next位置所以老节点A 的before C节点的next 就是改节点的新节点C’ 那么新节点A‘ 的before节点就是 C’第三次遍历将奇数项的节点单独拆分成一个链表得到我们复制的链表偶数位项就是老的链表 根据如上分析有如下代码 /*** 构建复杂链表链表next节点指向下一个节点* before节点指向链表中任意节点* */public static ListNode buildComplexListNode(){Random random new Random();ListNode pHead new ListNode(random.nextInt(100));ListNode[] nodeArray new ListNode[20];for (int i 0; i 20; i) {ListNode newNode new ListNode(random.nextInt(100));nodeArray[i] newNode;ListNode headNode pHead;while (headNode.getNext() ! null){headNode headNode.getNext();}headNode.setNext(newNode);}print(pHead);ListNode headNode pHead;while (headNode.getNext() ! null){headNode.setBefore(nodeArray[random.nextInt(nodeArray.length -1)]);headNode headNode.getNext();}return pHead;}/*** 复制复杂链表* 方法一空间换时间* 先遍历一次oldList复制next指针并且将oldNodenewNode存储到map中* 第二次遍历同时遍历oldListnewList直接通过oldList的before指向的oldListNode从mep中获取newNode* O(1)时间获取到before值* */public static ListNode complexListNode(ListNode pHead){if(pHead null || pHead.getNext() null){return pHead;}MapListNode, ListNode oldToNewNode new HashMap();ListNode complexNode pHead;ListNode newHead null;ListNode myHeadNode null;while (complexNode ! null){ListNode createNode new ListNode(complexNode.getValue());oldToNewNode.put(complexNode, createNode);if(newHead null){newHead createNode;myHeadNode newHead;}else {myHeadNode.setNext(createNode);myHeadNode myHeadNode.getNext();}complexNode complexNode.getNext();}ListNode beforeComplexNode pHead;ListNode beforeSetNode newHead;while (beforeComplexNode.getNext() ! null beforeSetNode.getNext() ! null){if(oldToNewNode.containsKey(beforeComplexNode.getBefore())){beforeSetNode.setBefore(oldToNewNode.get(beforeComplexNode.getBefore()));}beforeComplexNode beforeComplexNode.getNext();beforeSetNode beforeSetNode.getNext();}return newHead;} /*** 复制复杂链表* 方法二* 第一次遍历直接将范问到的节点复制新节点并且插入到范问到的节点后面* 第二次遍历设置新建节点的before节点因为每个新节点A‘都在老节点A的next位置所以老节点的before B节点的next 就是改节点的新节点B’* 那么新节点A‘的before节点就是B’* 第三次遍历将奇数项的节点单独拆分成一个链表得到我们复制的链表偶数位项就是老的链表*/public static ListNode complexListNode_2(ListNode pHead){if(pHead null || pHead.getNext() null){return pHead;}ListNode compleNode pHead;while (compleNode.getNext() ! null){ListNode createNode new ListNode(compleNode.getValue());createNode.setNext(compleNode.getNext());compleNode.setNext(createNode);compleNode compleNode.getNext().getNext();}ListNode beforeCompleNode pHead;while (beforeCompleNode.getNext() ! null){if(beforeCompleNode.getBefore() ! null){beforeCompleNode.getNext().setBefore(beforeCompleNode.getBefore().getNext());}beforeCompleNode beforeCompleNode.getNext().getNext();}ListNode fixCompleNode pHead;ListNode resultHead null;ListNode resultNode null;while (fixCompleNode.getNext() ! null){if(resultHead null){resultHead fixCompleNode.getNext();resultNode resultHead;}else {resultNode.setNext(fixCompleNode.getNext());resultNode resultNode.getNext();}fixCompleNode fixCompleNode.getNext().getNext();}return resultHead;}public static void printListNode(ListNode pHead){ListNode printNode pHead;while (printNode.getNext() ! null){System.out.print(value: printNode.getValue());System.out.print(, );System.out.print(before: (printNode.getBefore() ! null ? printNode.getBefore().getValue() : ));System.out.print(, );System.out.print(next: (printNode.getNext() ! null ? printNode.getNext().getValue() : ));printNode printNode.getNext();System.out.println();}}public static void main(String[] args) {ListNode oldListNode buildComplexListNode();System.out.println(oldListNode:);printListNode(oldListNode);System.out.println(newListNode:);ListNode mewListNode complexListNode(oldListNode);printListNode(mewListNode);ListNode newListNode_2 complexListNode_2(oldListNode);System.out.println(newListNode_2:);printListNode(newListNode_2);}以上代码中其他未定义方法都沿用 数据结构与算法–链表实现以及应用 中对应的方法。 上一篇数据结构与算法-- 二叉树中和为某一值的路径 下一篇数据结构与算法–二叉查找树转顺序排列双向链表
http://www.huolong8.cn/news/148411/

相关文章:

  • wordpress本站导航在哪里博客和网站有什么不同
  • 广州网站建设易得网站开发待遇
  • 响应式网站开发用什么软件潍坊网站建设推广报价
  • 建设景区网站推文凡科互动h5
  • 建设银行网站ie11打不开企业网络的组网方案
  • 收费网站怎么免费西安哪家公司做的网站好
  • 做ppt找图片的网站有哪些网址你懂我意思正能量2021
  • 网站后台ftp替换图片怎么做可以搭建分站的网站
  • 婚庆公司网站建设总结建设银行官方网站打不开
  • 印刷厂网站建设方案企业门户网站 php
  • 搜索引擎网站推广法 怎么做黄山建设网站公司电话
  • 黑白高端网站建设电商网站设计欣赏
  • 网站动态图是怎么做的外贸网站什么采集
  • 龙山网站建设禅城区电话黄页
  • 山东省建设业协会网站购物电商平台有哪些
  • 惠州企业网站seo公司做期货应该看的网站
  • 用文本文件做网站做微信平台网站
  • 建设一个功能简单的网站2019年新电商法做网站
  • 天凡建设股份有限公司网站环球资源网
  • 怎样给公司做推广 网站做跨境都有哪些网站
  • 做毕业网站的周记公司官网改版方案
  • 做招聘网站怎么运作龙岩天宫山缆车多少钱
  • 石家庄市建设局网站首页成都专业app开发服务
  • 网站开发开发的前景调试网站解析域名影响
  • 幕墙装饰工程网站模板成都设计公司地址
  • 有没有专门建设网站的公司合肥房产网新楼盘价格
  • 装饰工程 技术支持 东莞网站建设岳麓区做网站
  • 织梦cms网站模板广西建设科技协会网站
  • 沈阳学习做网站在线网页翻译软件
  • 交城有做网站的吗成都上市设计公司