【题目】
给定一个无序链表的头节点head,实现单链表的选择排序。
要求:空间复杂度O(1)。
【基本思路】
选择排序的过程是从未排序的部分中找到最小值,然后放在已经排好序部分的尾部,逐渐将未排序的部分缩小,最后全部变成排好序的部分。时间复杂度O(
【代码实现】
#python3.5
def selectionSort(head):
def getSmallestPre(head):
if head == None:
return None
pre = head #important
smallest = head
smallPre = None
head = head.next
while head != None:
if head.val < smallest.val:
smallest = head
smallPre = pre
pre = head
head = head.next
return smallPre
if head == None or head.next == None:
return head
tail = None #排序后链表的尾节点
newHead = None
cur = head
small = None
while cur != None:
smallPre = getSmallestPre(cur) #最小节点的前一个节点,方便删除节点
if smallPre != None:
small = smallPre.next
smallPre.next = small.next
else:
small = cur
cur = cur.next
if tail == None:
tail = small
newHead = tail
else:
tail.next = small
tail = small
return newHead