算法 - 归并排序
算法 - 归并排序
递归法
- 使用快慢指针,找到中间节点,当只有一个节点的时候,递归失效。
- 递归左部节点的头节点和右部节点的头节点。
- 新建前驱节点,并创建指向前驱节点的头指针,对比左右两侧节点大小,然后插入到前驱节点。
参考代码
class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null) return head; ListNode fast = head.next, slow = head; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } ListNode tmp = slow.next; slow.next = null;//截断操作 ListNode left = sortList(head);//递归,操作两个返回的头节点 ListNode right = sortList(tmp); ListNode h = new ListNode(0); ListNode res = h; while (left != null && right != null) { if (left.val < right.val) { h.next = left; left = left.next; } else { h.next = right; right = right.next; } h = h.next; } h.next = left != null ? left : right; return res.next;//返回虚拟头节点的下一个 } }
本文作者:护发师兄
本文链接:https://www.cnblogs.com/jonil/p/15967432.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步