建设机械网站案例wordpress最新免费主题下载地址
2026/2/17 12:26:23 网站建设 项目流程
建设机械网站案例,wordpress最新免费主题下载地址,制作装饰公司网站,angularjs 做团购网站先看题#xff1a;line 链表是一个有序链表#xff0c;现请你找出此链表的中间节点#xff0c; 将此节点的值返回。本题分为两种情况:如果链表节点数是偶数#xff0c;则取中间靠 左边/右边 的节点的值。这是一道典型的算法例题#xff1a;常见思路 接下来便可以引入我们的…先看题line 链表是一个有序链表现请你找出此链表的中间节点将此节点的值返回。本题分为两种情况:如果链表节点数是偶数则取中间靠 左边/右边 的节点的值。这是一道典型的算法例题常见思路接下来便可以引入我们的快慢指针法1. 快慢指针Two Pointers with Different Speeds特点两个指针从同一位置开始移动速度不同通常一个快一个慢常用于链表操作、检测循环、找中点本篇文章 我们先对链表操作的找中点进行学习关键需要根据题意“偶数时取靠右的节点”来调整结束条件这个算法的优势是只遍历链表一次时间复杂度 O (n)空间复杂度 O (1)是找链表中间节点的极优解法。那么首先 做链表的题目时 我们应首先考虑该链表为空的情况if (head null) { //提示链表为空 }接下来 便可以实现双指针算法中间靠右public static int fun(Node line){ Node slow line.next; Node fast line.next; // 快指针初始和慢指针同位置 // 循环条件调整 while(fast!nullfast.next!null){ slow slow.next; fast fast.next.next; } return slow.value; }中间靠左我们可以通过延迟慢指针的移动时机来实现靠左效果核心思路是快指针每走 2 步慢指针只走 1 步但让慢指针 “晚一步开始走”。 或者 让快指针“先一步走”这样便可以实现 算法结束时慢指针的前移public static int fun(Node line){ // 1. 初始化慢指针指向第一个有效节点跳过空的头结点 Node slow line.next; // 2. 初始化快指针指向第二个有效节点 Node fast line.next.next; // 3. 循环移动指针 // - fast ! null防止快指针走到链表末尾奇数个节点 // - fast.next ! null防止快指针的下一个节点为空偶数个节点 while(fast!nullfast.next!null){ slow slow.next; // 慢指针走1步 fast fast.next.next; // 快指针走2步 } // 4. 循环结束时慢指针正好指向中间节点返回其值 return slow.value; }总结核心实现逻辑该函数采用快慢指针法一次遍历最优解慢指针每次走 1 步、快指针每次走 2 步利用快指针先到达链表末尾的特性让慢指针停在中间位置时间复杂度 O (n)、空间复杂度 O (1)。初始位置关键作用慢指针初始指向第一个有效节点快指针初始指向第二个有效节点这种初始位置差 1 步的设计决定了偶数个节点时返回中间靠左的值如 1,2,3,4 返回 2、奇数个节点时返回正中间值如 1,2,3,4,5 返回 3。循环条件的意义fast!nullfast.next!null同时兼顾奇数 / 偶数节点场景既避免快指针直接走到 null奇数也避免快指针的下一个节点为 null 时执行fast.next.next引发空指针异常偶数是保证函数健壮性的关键。如果我的内容对你有帮助 还请点个赞 我会持续分享各种知识的

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询