【链表】链表快速排序_数据结构

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def quickSortList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head or not head.next:
            return head
        left,mid,right=ListNode(-1),ListNode(-1),ListNode(-1)
        ltail,mtail,rtail=left,mid,right
        p=head
        val=head.val
        while p:
            if p.val<val:
                ltail.next=p
                ltail=p
            elif p.val==val:
                mtail.next=p
                mtail=p
            else:
                rtail.next=p
                rtail=p
            p=p.next
        #所有尾结点指向空
        ltail.next=mtail.next=rtail.next=None
        #左区间排序
        left.next=self.quickSortList(left.next)
        #右区间排序
        right.next=self.quickSortList(right.next)
        #拼接
        
        #左区间的结尾指向mid
        self.getTail(left).next=mid.next
        #mid的结尾指向right(防止mid为空)
        self.getTail(left).next=right.next
        return left.next 
    def getTail(self,head):
        while head.next:
            head=head.next 
        return head
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.