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

青海制作网站有哪些比较好的企业网站建设

青海制作网站,有哪些比较好的企业网站建设,租房网 wordpress,怎么简化Wordpress欢迎页面复杂链表的复制 题目#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.yutouwan.com/news/262846/

相关文章:

  • 公司网站打不开怎么办爱站网app
  • 南通网站建设策划书wordpress十大插件
  • 网站备案填了虚假座机能过吗来宾网站建设公司
  • 做网站ui去哪儿接私活设计wordpress
  • 六安网站建设价格公司企业免费网站系统
  • 手机创建自己网站做二手房网站
  • 陕西华伟建设有限公司网站校园网站建设的感受论文
  • FPGA毕业设计代做网站网站建设的人员组织
  • 单一产品做网站番禺本地网站
  • 国内哪个网站做水产比较大娱乐类网站怎么建设
  • 网站式的公司记录怎么做中国电力建设股份部官方网站
  • 邢台企业网站制作公司网络平台建设费用
  • 百度搜索关键词排名优化推广国平seo
  • 做网站是哪个专业百度热搜榜在哪里看
  • 高端自适应网站开发大网站用wordpress吗
  • 做外包哪个网站好一些关键词优化网站排名
  • 江西航达建设集团网站做后期从哪个网站选音乐
  • 邯郸网站建设推荐咨询考二建需要什么学历和专业
  • 手表网站排名大全企业网站建设一般包含哪些内容
  • 哪个网站可以做围棋作业wordpress菜单项目边距和填充
  • 网站pv uv有什么作用asp.net mvc 5网站开发之美
  • 网站开发定义名称nova wordpress主题
  • 免费空间建站网站推荐网页实训报告
  • seo网站诊断莱芜信息港金点子招聘
  • 网站网页设计培训宁波免费网页制作模板
  • 临沂网站建设服务商wordpress菜单怎么设置中文
  • 开发网站的基本流程网站建设vip教程
  • 海报生成器在线制作福州短视频seo服务
  • 娱乐网站名字网页制作与设计课程设计报告
  • 湖南网站建设营销推广房产抵押贷款