链表排序 python 力扣148

力扣148 https://leetcode-cn.com/problems/sort-list/
归并排序单向链表 完整解法

# from utils import ListNode, LinkList
from typing import List 
class ListNode(object):
    def __init__(self, val=None, next=None):
        self.val = val 
        self.next = next
    def __repr__(self):
        res = ''
        p = self.next
        res = '' + str(self.val) + '-->'
        while p:
            tmp = str(p.val)
            tmp = tmp + '-->' if p.next else tmp
            res += tmp
            p = p.next
        return res

def LinkList(lst: List) -> ListNode:
    if not lst: return None
    head = ListNode(lst[0])
    p = head 
    for i in range(1, len(lst)):
        p.next = ListNode(lst[i])
        p = p.next 
    return head

def sortList(head: ListNode) -> ListNode:
    if not head or not head.next: return head 
    slow, fast = head, head.next 
    # find the mid and cut the LinkList
    while fast and fast.next:
        slow, fast = slow.next, fast.next.next 
    mid, slow.next = slow.next, None 
    left, right = sortList(head), sortList(mid)
    # merge two sorted LinkList
    dummy = ListNode(0)
    p = dummy
    while left and right:
        if left.val < right.val:
            p.next, left = left, left.next 
        else:
            p.next, right = right, right.next 
        p = p.next
    p.next = left if left else right 
    return dummy.next


if __name__ == "__main__":
    ins = LinkList([1, 6, 3, 9, 7, 5])
    print(ins)
    outs = sortList(ins)
    print(outs)
posted @   GMonster  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2019-01-14 ubuntu18.04忽略笔记本合盖设置方法
点击右上角即可分享
微信分享提示