leetcode hot100 排序链表

发布于:2025-02-11 ⋅ 阅读:(34) ⋅ 点赞:(0)

148. 排序链表

已解答

中等

相关标签

相关企业

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

# Definition for singly-linked list.

# class ListNode(object):

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution(object):

    def sortList(self, head):

        """

        :type head: Optional[ListNode]

        :rtype: Optional[ListNode]

        """

        # 排序至少是nlogn的,直接全部排序一个个连起来得了

        # if head==None:

        #     return None

        # arr=[]

        # while head:

        #     arr.append(head)

        #     head=head.next

       

        # arr.sort(key=lambda x:x.val)

        # prev = ListNode(-1)

        # for index ,node in enumerate(arr):

        #     prev.next = node

        #     prev = node

       

        # # print(arr)

        # arr[-1].next=None

        # return arr[0]

        # 这个面试的时候很难这么搞啊

        # 这个merge的时候是左闭合,右开

        return self.sortFunc(head,None)

    def merge(self,list1,list2):

        prev = ListNode(-1)

        temp ,temp1, temp2 = prev , list1,list2

        while temp1 and temp2:

            if temp1.val<=temp2.val:

                temp.next = temp1

                temp1=temp1.next

            else:

                temp.next = temp2

                temp2=temp2.next

            temp = temp.next

        if temp1:

            temp.next = temp1

        elif temp2:

            temp.next = temp2

        return prev.next

        # 如果两个都是空,return也是空

    def sortFunc(self,head,tail):

        # 利用快慢指针,得到mid,然后使用merge(左右两个递归的序列)

        if not head:

            return head

        if head == tail:

            return None

        if head.next==tail:

            head.next=None

            return head

        # 如果head是空,那就返回空

        fast , slow = head,head

        while fast!=tail:

            fast = fast.next

            slow = slow.next

            if fast!=tail:

                fast = fast.next

        return self.merge(self.sortFunc(head,slow),self.sortFunc(slow,tail))






 

如果实际遇到的话,我直接来个放到arr里面

但是面试的话,我们这里直接是来个归并排序


网站公告

今日签到

点亮在社区的每一天
去签到