# 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.