网站建设需要考虑哪些因素沈阳网站制作找网势科技

张小明 2026/1/15 20:33:13
网站建设需要考虑哪些因素,沈阳网站制作找网势科技,wordpress照片ppt,html5 mysql 网站开发设计链表 问题描述 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性#xff1a;val 和 next。val 是当前节点的值#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表#xff0c;则还需要一个属性 prev 以指示链表中的上一个节点…设计链表问题描述设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性val和next。val是当前节点的值next是指向下一个节点的指针/引用。如果是双向链表则还需要一个属性prev以指示链表中的上一个节点。实现MyLinkedList类int get(int index)获取链表中第index个节点的值。如果索引无效则返回-1。void addAtHead(int val)在链表的第一个元素之前添加一个值为val的节点。插入后新节点将成为链表的第一个节点。void addAtTail(int val)将值为val的节点追加到链表的最后一个元素。void addAtIndex(int index, int val)在链表中的第index个节点之前添加值为val的节点。如果index等于链表的长度则该节点将附加到链表的末尾。如果index大于链表长度则不会插入节点。如果index小于 0则在头部插入节点。void deleteAtIndex(int index)如果索引index有效则删除链表中的第index个节点。注意所有val值都在[1, 1000]范围内。操作次数不会超过2000次。请不要使用内置的 LinkedList 库。示例输入: [MyLinkedList, addAtHead, addAtTail, addAtIndex, get, deleteAtIndex, get] [[], [1], [3], [1,2], [1], [1], [1]] 输出: [null, null, null, null, 2, null, 3] 解释: MyLinkedList myLinkedList new MyLinkedList(); myLinkedList.addAtHead(1); // 链表: 1 myLinkedList.addAtTail(3); // 链表: 1-3 myLinkedList.addAtIndex(1,2); // 链表: 1-2-3 myLinkedList.get(1); // 返回 2 myLinkedList.deleteAtIndex(1); // 链表: 1-3 myLinkedList.get(1); // 返回 3算法思路虚拟头节点哨兵节点使用虚拟头节点简化边界处理避免对空链表的特殊处理所有操作都可以统一处理长度维护维护链表长度避免每次遍历计算用于快速验证索引有效性操作get(index)遍历到第index个节点addAtHead(val)在虚拟头节点后插入addAtTail(val)遍历到尾节点后插入addAtIndex(index, val)在第index个位置前插入deleteAtIndex(index)删除第index个节点代码实现方法一单链表 虚拟头节点classMyLinkedList{// 链表节点定义privatestaticclassListNode{intval;ListNodenext;ListNode(intval){this.valval;this.nextnull;}}privateListNodedummyHead;// 虚拟头节点privateintsize;// 链表长度/** * 初始化链表 */publicMyLinkedList(){dummyHeadnewListNode(-1);// 虚拟头节点值不重要size0;}/** * 获取链表中第index个节点的值 * * param index 节点索引 (0-based) * return 节点值如果索引无效返回-1 */publicintget(intindex){// 检查索引有效性if(index0||indexsize){return-1;}// 从虚拟头节点开始移动index1步到达目标节点ListNodecurrentdummyHead;for(inti0;iindex;i){currentcurrent.next;}returncurrent.val;}/** * 在链表头部添加节点 * * param val 要添加的节点值 */publicvoidaddAtHead(intval){addAtIndex(0,val);}/** * 在链表尾部添加节点 * * param val 要添加的节点值 */publicvoidaddAtTail(intval){addAtIndex(size,val);}/** * 在指定索引位置添加节点 * * param index 插入位置的索引 * param val 要添加的节点值 */publicvoidaddAtIndex(intindex,intval){// 如果index大于链表长度不插入if(indexsize){return;}// 如果index小于0在头部插入if(index0){index0;}// 找到插入位置的前一个节点ListNodeprevdummyHead;for(inti0;iindex;i){prevprev.next;}// 创建新节点并插入ListNodenewNodenewListNode(val);newNode.nextprev.next;prev.nextnewNode;size;}/** * 删除指定索引位置的节点 * * param index 要删除的节点索引 */publicvoiddeleteAtIndex(intindex){// 检查索引有效性if(index0||indexsize){return;}// 找到要删除节点的前一个节点ListNodeprevdummyHead;for(inti0;iindex;i){prevprev.next;}// 删除节点prev.nextprev.next.next;size--;}}方法二双链表classMyLinkedList{privatestaticclassListNode{intval;ListNodenext;ListNodeprev;ListNode(intval){this.valval;}}privateListNodehead;// 虚拟头节点privateListNodetail;// 虚拟尾节点privateintsize;publicMyLinkedList(){headnewListNode(-1);tailnewListNode(-1);head.nexttail;tail.prevhead;size0;}publicintget(intindex){if(index0||indexsize){return-1;}ListNodecurrent;// 从较近的一端开始遍历if(indexsize/2){currenthead.next;for(inti0;iindex;i){currentcurrent.next;}}else{currenttail.prev;for(inti0;isize-1-index;i){currentcurrent.prev;}}returncurrent.val;}publicvoidaddAtHead(intval){addAtIndex(0,val);}publicvoidaddAtTail(intval){addAtIndex(size,val);}publicvoidaddAtIndex(intindex,intval){if(indexsize){return;}if(index0){index0;}ListNodeprev;if(indexsize/2){prevhead;for(inti0;iindex;i){prevprev.next;}}else{prevtail.prev;for(inti0;isize-index;i){prevprev.prev;}}ListNodenewNodenewListNode(val);ListNodenextprev.next;prev.nextnewNode;newNode.prevprev;newNode.nextnext;next.prevnewNode;size;}publicvoiddeleteAtIndex(intindex){if(index0||indexsize){return;}ListNodecurrent;if(indexsize/2){currenthead.next;for(inti0;iindex;i){currentcurrent.next;}}else{currenttail.prev;for(inti0;isize-1-index;i){currentcurrent.prev;}}current.prev.nextcurrent.next;current.next.prevcurrent.prev;size--;}}算法分析时间复杂度get(index)O(index)最坏O(n)addAtHead(val)O(1)addAtTail(val)O(n)单链表O(1)双链表addAtIndex(index, val)O(index)最坏O(n)deleteAtIndex(index)O(index)最坏O(n)空间复杂度O(n)n为链表长度算法过程初始化dummyHead → nullsize 0addAtHead(1)在dummyHead后插入1dummyHead → 1 → nullsize 1addAtTail(3)在尾部插入3dummyHead → 1 → 3 → nullsize 2addAtIndex(1, 2)在索引1位置插入2找到索引0的节点值为1插入2dummyHead → 1 → 2 → 3 → nullsize 3get(1)返回索引1的值2deleteAtIndex(1)删除索引1的节点dummyHead → 1 → 3 → nullsize 2get(1)返回索引1的值3测试用例publicclassTestMyLinkedList{publicstaticvoidmain(String[]args){// 测试用例1标准示例MyLinkedListmyLinkedList1newMyLinkedList();myLinkedList1.addAtHead(1);// [1]myLinkedList1.addAtTail(3);// [1,3]myLinkedList1.addAtIndex(1,2);// [1,2,3]System.out.println(get(1): myLinkedList1.get(1));// 2myLinkedList1.deleteAtIndex(1);// [1,3]System.out.println(get(1): myLinkedList1.get(1));// 3System.out.println();// 测试用例2边界索引MyLinkedListmyLinkedList2newMyLinkedList();System.out.println(get(0): myLinkedList2.get(0));// -1 (空链表)myLinkedList2.addAtHead(1);System.out.println(get(0): myLinkedList2.get(0));// 1System.out.println(get(1): myLinkedList2.get(1));// -1 (越界)myLinkedList2.deleteAtIndex(0);// 删除唯一元素System.out.println(get(0): myLinkedList2.get(0));// -1System.out.println();// 测试用例3addAtIndex边界情况MyLinkedListmyLinkedList3newMyLinkedList();myLinkedList3.addAtIndex(0,1);// 等同于addAtHeadmyLinkedList3.addAtIndex(1,2);// 等同于addAtTailmyLinkedList3.addAtIndex(1,3);// 在中间插入// 链表: [1,3,2]System.out.println(get(0): myLinkedList3.get(0));// 1System.out.println(get(1): myLinkedList3.get(1));// 3System.out.println(get(2): myLinkedList3.get(2));// 2// 测试用例4重复操作MyLinkedListmyLinkedList5newMyLinkedList();myLinkedList5.addAtHead(1);myLinkedList5.addAtHead(1);// 允许重复值myLinkedList5.addAtTail(1);// 链表: [1,1,1]System.out.println(get(0): myLinkedList5.get(0));// 1System.out.println(get(1): myLinkedList5.get(1));// 1System.out.println(get(2): myLinkedList5.get(2));// 1myLinkedList5.deleteAtIndex(1);// 删除中间的1// 链表: [1,1]System.out.println(get(0): myLinkedList5.get(0));// 1System.out.println(get(1): myLinkedList5.get(1));// 1}}关键点虚拟头节点统一处理空链表和非空链表的情况避免对head的特殊处理简化插入和删除操作的代码索引有效性get和deleteAtIndex索引范围[0, size-1]addAtIndex索引范围(-∞, size]超出范围不插入复用addAtHead和addAtTail可以复用addAtIndex减少代码重复提高可维护性边界情况处理空链表的操作单节点链表的删除越界索引常见问题为什么使用虚拟头节点避免对空链表的特殊处理所有插入操作都可以统一为在某节点后插入删除操作总是有前驱节点无需特殊处理头节点addAtIndex的索引规则index 0在头部插入index size在尾部插入index size不插入0 index size在指定位置插入
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

高端网站建设推荐万维科技wordpress第三方支付接口

WindowResizer终极指南:轻松掌控任意窗口尺寸的秘诀 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否遇到过某些应用程序窗口固执地保持固定尺寸,无论…

张小明 2026/1/4 15:25:20 网站建设

培训公司网站源码广州百度seo 网站推广

Vim使用指南:高效文本编辑与操作技巧 1. 基本操作与模式 1.1 模式切换 Vim 有多种模式,如 Normal 模式、Insert 模式、Visual 模式等。在 Insert 模式下,可以输入文本;而在 Normal 模式下,可执行各种命令。切换到 Insert 模式可使用 i 命令,从 Insert 模式返回 Norm…

张小明 2026/1/4 15:25:19 网站建设

如何自己做留言板网站企业型商务网站制作

Paper2GUI终极快捷键配置指南:一键解决所有操作难题 【免费下载链接】paper2gui Convert AI papers to GUI,Make it easy and convenient for everyone to use artificial intelligence technology。让每个人都简单方便的使用前沿人工智能技术 项目地址…

张小明 2026/1/4 3:27:26 网站建设

网站建设管理与维护ppt光谷网站制作

网络规划设计 打通总部、分支、数据中心两种业务,并且做到业务隔离,骨干网使用srv6 BE进行互联互通,ne2做为RR locator规划看拓扑图上,已标出,保证所有设备唯一,其它sid全部用动态自动生成 1、使能各接口的…

张小明 2026/1/10 18:17:22 网站建设

企业网站能起到什么作用云服务器安装wordpress程序

在智能工厂中,如果IT与OT网络无缝融合,EtherCAT设备能够直接从IT服务器室控制,无需任何专门的网关,这不仅简化了网络结构,还提高了系统的效率和灵活性。盟通科技合作伙伴acontis目前推出了一个方案,它允许用…

张小明 2026/1/10 20:32:09 网站建设

门户网站建设一般多少钱阿里云怎么上传网站

第一章:【AI浏览器革命】:Open-AutoGLM 沉思浏览器的5大颠覆性特性Open-AutoGLM 沉思浏览器正重新定义人机交互边界,将传统网页浏览升级为智能认知协作。它深度融合大语言模型与浏览器内核,实现语义级内容理解、自主任务执行和上下…

张小明 2026/1/5 10:46:44 网站建设