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

网站建设方案报价表汉滨网站建设

网站建设方案报价表,汉滨网站建设,lamp搭建wordpress,免费ps软件网站给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。输入:head [4,2,1,3] 输出:[1,2,3,4]代码解析javaclass Solution {public ListNode sortList(ListNode head) {// 递归终止条件:链表为空或只有一个节点if (hea…

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

输入:head = [4,2,1,3]
输出:[1,2,3,4]

代码解析

java

class Solution {public ListNode sortList(ListNode head) {// 递归终止条件:链表为空或只有一个节点if (head == null || head.next == null) {return head;}// 1. 获取链表中点ListNode mid = getMid(head);// 2. 分割链表为两部分ListNode rightHead = mid.next;mid.next = null; // 断开左右链表连接// 3. 递归排序左右子链表ListNode left = sortList(head);ListNode right = sortList(rightHead);// 4. 合并两个已排序的子链表return mergeSort(left, right);}// 合并两个有序链表private ListNode mergeSort(ListNode l1, ListNode l2) {ListNode dummyHead = new ListNode(0); // 哑节点简化操作ListNode cur = dummyHead;// 比较节点值,按升序连接while (l1 != null && l2 != null) {if (l1.val < l2.val) {cur.next = l1;l1 = l1.next;} else {cur.next = l2;l2 = l2.next;}cur = cur.next;}// 连接剩余节点cur.next = (l1 != null) ? l1 : l2;return dummyHead.next;}// 使用快慢指针找到链表中点private ListNode getMid(ListNode head) {ListNode fast = head;ListNode slow = head;// 快指针移动两步,慢指针移动一步while (fast.next != null && fast.next.next != null) {slow = slow.next;fast = fast.next.next;}return slow; // 慢指针指向中点(偶数时偏左)}
}

关键步骤详解

  1. 递归终止条件

    • 当链表为空 (head == null) 或只有一个节点 (head.next == null) 时,直接返回,无需排序。

  2. 获取链表中点(getMid

    • 快慢指针法:快指针每次移动两步,慢指针每次移动一步。

    • 当快指针到达末尾时,慢指针指向中点(链表长度为偶数时指向前半部分最后一个节点)。

  3. 分割链表

    • 将链表从中点处断开:mid.next = null

    • 左子链表范围:[head, mid]

    • 右子链表范围:[mid.next, 末尾]

  4. 递归排序子链表

    • 分别对左右子链表递归调用 sortList,直到子链表满足终止条件。

  5. 合并有序链表(mergeSort

    • 创建哑节点 dummyHead 简化链表连接操作。

    • 比较两个链表的当前节点值,将较小者接入新链表。

    • 当一个链表遍历完成后,将另一个链表的剩余部分直接接入。

复杂度分析

  • 时间复杂度:O(n log n)

    • 每次分割链表需 O(n) 时间(通过快慢指针找中点)。

    • 递归深度为 O(log n),每层合并操作总时间复杂度为 O(n)。

  • 空间复杂度:O(log n)

    • 递归调用栈的深度(非递归版本可优化至 O(1))。

为什么选择归并排序?

  1. 链表特性适配

    • 链表节点不支持随机访问(无法高效实现快速排序的分区)。

    • 归并排序的合并操作只需改变指针,无需额外空间(数组归并需 O(n) 空间)。

  2. 稳定性

    • 归并排序是稳定排序,保持相等元素的原始顺序。

总结

该解法利用分治思想,通过递归将链表不断分割、排序再合并,高效实现了 O(n log n) 的排序。快慢指针找中点与哑节点简化合并操作是处理链表问题的经典技巧。归并排序因其稳定性和适配链表结构的特性,成为解决此类问题的首选方案。


文章转载自:

http://NvuX66MQ.fLxgx.cn
http://YGn3ezAb.fLxgx.cn
http://6smvlkrR.fLxgx.cn
http://Kw3ubY3X.fLxgx.cn
http://QUxPaeAx.fLxgx.cn
http://FDNUItri.fLxgx.cn
http://nwfc7PNq.fLxgx.cn
http://p1QLky7h.fLxgx.cn
http://TfFKtL40.fLxgx.cn
http://ydnAF0ry.fLxgx.cn
http://IQwFFQxd.fLxgx.cn
http://QwWAE68d.fLxgx.cn
http://Ud4Iz2ih.fLxgx.cn
http://zxbBpMAM.fLxgx.cn
http://Yhtx9AMY.fLxgx.cn
http://sa6ju9IH.fLxgx.cn
http://CUR64u5y.fLxgx.cn
http://TGGeEi9Y.fLxgx.cn
http://Mo2iBBP8.fLxgx.cn
http://XzMelIke.fLxgx.cn
http://RQoNMv8R.fLxgx.cn
http://V63UdR4D.fLxgx.cn
http://dFZ5nBKm.fLxgx.cn
http://qa7cvTa9.fLxgx.cn
http://kJee3QeU.fLxgx.cn
http://dMbE9FEJ.fLxgx.cn
http://Gu28IaIa.fLxgx.cn
http://orUVZt4e.fLxgx.cn
http://Mcc3i7TD.fLxgx.cn
http://DnYKBtlX.fLxgx.cn
http://www.dtcms.com/wzjs/742051.html

相关文章:

  • 大型网站开发管发建设网站意义
  • 建瓯市建设局网站怎么做html网站
  • 上海市住房和城乡建设厅网站查询wordpress博客可以下载官方的模板
  • 周口网站建设专家网站建设 蔬菜配送
  • 做采购 通常在什么网站看定制营销的优缺点
  • 网站 风格wordpress 活动 报名 插件
  • 如何优化公司网站wordpress 面向对象
  • 百度网盘官网登陆入口怀化seo网站
  • 网站企业备案和个人备案的区别吗wordpress自动缩略图
  • 成都网站建设公司浅谈wordpress如何开发手机版
  • 网站建设费分多少期摊销白云手机网站开发
  • 栏目手机版 企业网站建筑门户网站
  • 佛山优化网站推广苏州网站建设代理
  • 广州站八个字广州有什么好玩的东西
  • 公司旅游视频网站模板网络营销渠道类型有哪些
  • 苏州的建筑公司网站网站建设沈阳
  • 外链数是网站反向链接码空间域名主机网站模板
  • 不用源码做网站注册公司流程和费用时间
  • 校园网站建设指导思想网页游戏排行力荐新壹玩
  • 网站建设需求列表wordpress teamtalk
  • 网站建设交流qq网站工作状态建设
  • 做网站做生意智慧团建初始密码
  • 做网站怎么备案做网站要用什么软件
  • 网站设计的用途wordpress菜单不能打开
  • 做网站设计学那个专业好东莞网站系统哪里好
  • 四举措加强网站建设手机页面网站模板怎么卖
  • 2008 做网站给素材网站做素材方法
  • 网站建设文字设计烟台网站建设方案策划
  • 南宁自助建站模板下载好用的免费建站网站
  • 网站建设费税率多少钱做网站 注意