欢迎光临散文网 会员登陆 & 注册

LeetCodeTop100_148. 排序链表

2023-03-30 11:15 作者:方猫zzz  | 我要投稿

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

     

    示例 1:

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

    示例 2:

    输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]

    示例 3:

    输入:head = []输出:[]


    其主要思路是使用归并排序的方法,将链表分成左右两个部分,对每个部分进行排序后再进行合并。

    具体来说,sortList函数就是对整个链表进行排序的函数,它调用了mergeSort函数对链表进行归并排序。如果链表为空或者只有一个节点,那么就可以直接返回链表本身。

    mergeSort函数使用快慢指针的方法找到链表的中间节点,然后将链表分成左右两个部分,对每个部分分别调用mergeSort函数进行排序,然后再调用mergeList函数进行合并。注意,在分割链表时,要将中间节点的next指针设置为nullptr,否则会出现环形链表。

    mergeList函数就是将左右两个已经排好序的链表合并成一个有序链表。为了方便操作,使用了一个虚拟头节点dummy,然后再遍历左右两个链表,根据节点值的大小关系将节点插入到新的链表中。最后要注意,当某一个链表已经遍历完时,要将另一个链表的剩余节点全部插入到新的链表中。

    总之,这段代码实现了对链表进行排序的功能,采用了归并排序的方法,是一个比较高效的算法。




    LeetCodeTop100_148. 排序链表的评论 (共 条)

    分享到微博请遵守国家法律