跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

链表核心算法:反转、合并与排序 Python 实现

链表核心算法涵盖反转、区间反转、K 组翻转及归并排序。利用快慢指针定位中点,结合双指针合并有序链表,提供完整 Python 实现。解析关键步骤如虚拟头节点使用、指针断开与重连,解决链表操作中的常见难点,适用于算法面试准备。

观心发布于 2026/3/15更新于 2026/8/1739 浏览
链表核心算法:反转、合并与排序 Python 实现

1. 链表反转

1.1 反转链表

链表反转示意图

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def reverseList(self, head):
        pre = None
        cur = head
        while cur:
            nxt = cur.next
            cur.next = pre
            pre = cur
            cur = nxt
        return pre

1.2 反转链表 II

反转链表 II 示意图

思路:整体来看,p0 是反转前的第 left 个节点的前一个节点(dummy.next),pre 是反转后的头节点,cur 是当前遍历到的节点。

class Solution:
    def reverseBetween(self, head, left, right):
        p0 = dummy = ListNode(next=head)
        for _ in range(left - 1):
            p0 = p0.next
        pre = None
        cur = p0.next
        for _ in range(right - left + 1):
            nxt = cur.next
            cur.next = pre
            pre = cur
            cur = nxt
        p0.next.next = cur
        p0.next = pre
        return dummy.next

反转链表 II 结果示意图

1.3 K 个一组翻转链表

class Solution:
    def reverseKGroup(self, head, k):
        n = 0
        cur = head
        while cur:
            n += 1
            cur = cur.next
        
        p0 = dummy = ListNode(next=head)
        pre = None
        cur = head
        
        while n >= k:
            n -= k
            for _ in range(k):
                nxt = cur.next
                cur.next = pre
                pre = cur
                cur = nxt
            
            nxt = p0.next
            nxt.next = cur
            p0.next = pre
            p0 = nxt
        return dummy.next

2. 链表排序

2.1 链表的中间结点

中间结点示意图

代码:典型的快慢指针。

class Solution:
    def middleNode(self, head):
        t1 = t2 = head
        while t2 and t2.next:
            t1 = t1.next
            t2 = t2.next.next
        return t1

2.2 合并两个有序链表

合并有序链表示意图

class Solution:
    def mergeTwoLists(self, list1, list2):
        dummy = ListNode()
        cur = dummy
        while list1 and list2:
            if list1.val <= list2.val:
                cur.next = list1
                cur = cur.next
                list1 = list1.next
            else:
                cur.next = list2
                cur = cur.next
                list2 = list2.next
        cur.next = list1 if list1 else list2
        return dummy.next

合并有序链表结果示意图

2.3 排序链表(归并排序)

思路:找到链表的中间节点,断开为前后两端,分别排序前后两端,排序后再合并两个有序链表。

class Solution:
    def middleNode(self, head):
        slow = fast = head
        while fast and fast.next:
            pre = slow
            slow = slow.next
            fast = fast.next.next
        pre.next = None
        return slow

    def mergeTwoLists(self, list1, list2):
        cur = dummy = ListNode()
        while list1 and list2:
            if list1.val < list2.val:
                cur.next = list1
                list1 = list1.next
            else:
                cur.next = list2
                list2 = list2.next
            cur = cur.next
        cur.next = list1 if list1 else list2
        return dummy.next

    def sortList(self, head):
        if not head or not head.next:
            return head
        head2 = self.middleNode(head)
        head = self.sortList(head)
        head2 = self.sortList(head2)
        return self.mergeTwoLists(head, head2)

目录

  1. 1. 链表反转
  2. 1.1 反转链表
  3. 1.2 反转链表 II
  4. 1.3 K 个一组翻转链表
  5. 2. 链表排序
  6. 2.1 链表的中间结点
  7. 2.2 合并两个有序链表
  8. 2.3 排序链表(归并排序)
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 无人机遥感滑坡与泥石流图像识别数据集
  • Flutter 开发环境配置指南 Windows/Mac
  • 基于 Python 的牙科全结构化录入与 AI 可视化方案
  • 无人机路径规划算法详解:原理、对比与优化
  • 2026 AI Agent 框架盘点:OpenClaw 及 16 大衍生生态技术特性与选型指南
  • 无人机路径规划核心算法解析与实战对比
  • AI 辅助编程:利用 GitHub Copilot 等工具提升开发效率
  • 纯 Java 手写 TopoJSON 生成器零依赖实战
  • Python 能做什么?常见应用场景与学习指南
  • Web 服务基石:Nginx 从安装到高级配置实战
  • Linux 系统安装 MATLAB 完整指南:下载、配置与启动
  • SpringBoot Actuator 未授权访问漏洞修复方案
  • 宝塔面板前端项目部署实战指南
  • Qwen3-TTS VoiceDesign 实战:AR 导览眼镜空间音频定位方案
  • 前端文件下载实战:从原理到最佳实践
  • Java 入门基础教程
  • Uniapp + Vue3 自定义 tabBar 实现方案
  • 命令行大模型上下文协议(MCP)工具:MCPHost 实践指南
  • 低成本运行 Claude Code:利用 LiteLLM 接入 GitHub Copilot API
  • 动态规划:01 背包问题详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online