首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

链表的Mergesort的Python实现不起作用

链表的Mergesort是一种常用的排序算法,用于对链表进行排序。下面是链表的Mergesort的Python实现:

代码语言:txt
复制
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def mergeSort(head):
    if not head or not head.next:
        return head
    
    # 找到链表的中点
    slow, fast = head, head.next
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
    
    # 将链表分为两部分
    mid = slow.next
    slow.next = None
    
    # 递归地对两部分链表进行排序
    left = mergeSort(head)
    right = mergeSort(mid)
    
    # 合并两个有序链表
    dummy = ListNode(0)
    curr = dummy
    while left and right:
        if left.val < right.val:
            curr.next = left
            left = left.next
        else:
            curr.next = right
            right = right.next
        curr = curr.next
    
    curr.next = left if left else right
    
    return dummy.next

这段代码实现了链表的Mergesort算法。具体步骤如下:

  1. 定义一个ListNode类,表示链表的节点。
  2. 定义mergeSort函数,用于对链表进行排序。如果链表为空或只有一个节点,直接返回链表。
  3. 使用快慢指针找到链表的中点,将链表分为两部分。
  4. 递归地对两部分链表进行排序。
  5. 合并两个有序链表,创建一个虚拟头节点dummy和一个当前节点curr
  6. 比较左右两个链表的节点值,将较小的节点连接到curr的后面。
  7. 更新curr和被选中节点的指针。
  8. 如果左链表还有剩余节点,将剩余节点连接到curr的后面。
  9. 如果右链表还有剩余节点,将剩余节点连接到curr的后面。
  10. 返回合并后的链表。

链表的Mergesort算法的优势在于它的时间复杂度为O(nlogn),且不需要额外的空间。它适用于对链表进行排序的场景。

腾讯云提供了多种云计算相关产品,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方文档:腾讯云产品

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 链表实现

    链表之前我们已经介绍过,这章笔记我们就来通过C++语言实现一个简单链表 C语言表示链表一个节点 struct Node { int data; struct Node*link; } 上图: 头节点...首先链表有一个头节点,他没有数据,类型是节点指针 他负责标识这个链表,比如我现在这个头节点叫head ,如果head = NULL表示链表为空 如果head不为空则表示链表有节点。...通过malloc给节点在堆上分配内存 Node*temp = malloc(sizeof(Node)); 然后通过头节点指向这个节点 head = temp; 这样我们就创建了一个有节点链表 我们想在已有的节点后面再创建一个节点该如何创建呢...=NULL) { temp = temp->link; } printf("the last data of Node is %d",temp->data); 很简单逻辑 头节点是不可以被修改,因为头结点是链表标识...,如果修改掉链表标识,链表将无法成立

    13910

    python实现链表

    8 import sys class Lnode():     def __init__(self,elem,next=None):         self.elem = elem    #节点值...self):         L = Lnode(None,None)         self.head = L       #定义头节点         self.length = 0     #链表元素个数...    # 链表是否为空     def isempty(self):         if self.head.next is None:             return True         ...newNode.next = self.head.next             self.head.next = newNode         self.length += 1     #在指定元素位置后面插入...                sys.stdout.write("%s " %(p.elem))             print             return     #查找元素,返回指向该元素节点

    46730

    链表实现

    链表分为单向链表、双向链表和循环链表链表这种数据结构就像是火车车厢一样,每个车厢可以插入到任意位置。...isEmpty(): 如果链表中不包含任何元素,返回 true,如果链表长度大于 0 则返回 false。 下面来一一进行实现。...先实现单向链表(上一个数据指针指向下一个数据存储地址),然后在这基础上实现双向链表和循环链表。这里使用 ES6 class 形式来实现。...remove 方法可以结合 indexOf 方法和 removeAt 方法来实现。先通过 indexOf方法获取要删除元素索引,然后通过索引去删除指定元素。...false : this.removeAt(idx); } insert(index,elem) 方法 这个方法跟删除一个元素实现思路很相似,也需要条件判断,也需要断开链表然后插入新内容。

    53010

    链表和双向链表实现

    前言 ---- 链表数据通过指针连接,添加、插入或删除节点只需要修改指针指向 实现思路 实现一个链表需要具备以下方法 在链表尾部添加节点 获取链表所有节点数据 链表指定位置插入元素 获取链表指定位置节点数据...获取节点在链表位置 更新链表指定位置数据 移除链表指定位置节点 移除链表指定节点 判断链表是否为空 获取链表长度 链表内部需要定义head指针和链表长度 实现代码 定义head指针和length...(linkedList.size()) 双向链表 双向链表指针是双向,前指针指向上一个节点,后指针指向下一个节点 head指向第一个节点,tail指向最后一个节点 双向链表实现思路 需要具备以下方法...尾部插入元素 任意位置插入元素 获取所有节点数据 正向遍历链表获取节点数据 反向遍历链表获取节点数据 获取指定位置节点数据 获取指定数据在链表位置 更新指定位置节点数据 移除指定位置节点 移除指定数据节点...判断链表是否为空 获取链表长度 定义head和tail分别指向第一个节点和最后一个节点 代码实现 /** * 双向链表 */ function DoublyLinkedList() { //指向第一个节点

    70540

    Python实现单向链表

    关于链表介绍,请参考:链表介绍 本篇文章使用 Python实现一个单向链表。 一、定义一个创建节点链表是由一个个节点组成,在创建链表之前,要先创建节点,然后把节点“串”到链表上。...实现 show() 方法时,为了更形象地展示链表中每个节点关系,我在相邻两个节点之间使用右箭头连接(空链表无效果)。...同时,上面实现了获取单向链表长度方法 length(),返回链表当前节点个数。...index(value):返回一个数据在链表第几个节点,与判断是否存在实现方式一样,这里返回是数据处于第几个节点中,如果链表中没有这个数据,则返回-1。...实现单向链表及单向链表一些简单操作方法。

    98520

    Python实现双向链表

    关于链表介绍,请参考:链表介绍 本篇文章使用 Python实现双向链表。 一、定义一个创建节点链表是由一个一个节点组成,在创建链表之前,要先创建节点,然后把节点“串”到链表上。...实现 show() 方法时,为了更形象地展示链表中每个节点关系,我在相邻两个节点之间使用左箭头加右箭头连接(空链表无效果)。...同时,上面实现了获取双向链表长度方法 length(),返回链表当前节点个数。...index(value):返回一个数据在链表第几个节点,与判断是否存在实现方式一样,这里返回是数据处于第几个节点中,如果链表中不存在这个数据,则返回-1。...实现双向链表及双向链表一些简单操作方法。

    54930

    python实现链表基础操作

    1 问题 用python实现链表基础操作:插入,删除,遍历,判空,清空链表,求长度,获取元素,判断元素是否存在。...2 方法 解决问题步骤采用如下方式: 使用函数和类方法来实现链表基本操作 插入操作时使用头插法 删除操作时,删除头节点一行代码即可,其他位置需要判断+遍历 通过实验、实践等证明提出方法是有效..._head is None def length(self): """求链表长度""" p = self....(9) linklist.remove(5) linklist.travel() linklist.clear() linklist.travel() 3 结语 针对用python...实现链表基础操作,通过python运行实验,证明该方法是有效,这种设置方法代码较多,因此未来还需继续改善这种方法以适应更多场景。

    15710

    Python 算法基础篇:链表和双向链表实现与应用

    Python 算法基础篇:链表和双向链表实现与应用 引言 链表和双向链表是常用线性数据结构,它们在算法和程序设计中有着广泛应用。...本篇博客将重点介绍链表和双向链表原理、实现以及它们在不同场景下应用。我们将使用 Python 来演示链表和双向链表实现,并通过实例展示每一行代码运行过程。 ❤️ ❤️ ❤️ 1....单向链表实现与应用 2.1 单向链表实现 下面是单向链表 Python 实现: class ListNode: def __init__(self, val=0, next=None):...双向链表实现与应用 3.1 双向链表实现 下面是双向链表 Python 实现: class DoubleListNode: def __init__(self, val=0, prev=None...我们通过使用 Python 来演示链表和双向链表实现,并通过实例展示它们在不同场景下应用。

    65820
    领券