这题要求是插入排序法。就是从无到有将每一个元素依次插入到一个排序号的linked list中。本次中将插入到中间的保留下来,当需要中间插入的时候与之比较,可以节省部分时间,试查询效率提高。代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def insertionSortList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return head
if not head.next:
return head
a = ListNode(0)
a.next = head
head1 = head.next
if head1.val < head.val:
head.next = head1.next
a.next = head1
head1.next = head
head = head1
if not head.next.next:
return head
else:
b = head.next.next
if b.val < head.val:
head.next.next = b.next
b.next = head
a.next = b
head = b
elif head.val <= b.val <= head.next.val:
head.next.next = b.next
b.next = head.next
head.next = b
else:
pass
middle = head.next
right = head.next.next
head1 = head.next.next.next
while head1:
if head1.val < head.val:
head2 = head1.next
head1.next = head
a.next = head1
right.next = head2
head = head1
head1 = head2
elif head1.val > right.val:
right = head1
head1 = head1.next
elif head1.val <= middle.val:
head2 = head.next
while True:
if head1.val <= head2.val:
head3 = head1.next
head.next = head1
head1.next = head2
right.next = head3
middle = head1
head1 = head3
break
elif head1.val <= head2.next.val:
head3 = head1.next
head1.next = head2.next
head2.next = head1
right.next = head3
middle = head1
head1 = head3
break
else:
head2 = head2.next
else:
head2 = middle.next
while True:
if head1.val <= head2.val:
head3 = head1.next
middle.next = head1
head1.next = head2
right.next = head3
middle = head1
head1 = head3
break
elif head1.val <= head2.next.val:
head3 = head1.next
head1.next = head2.next
head2.next = head1
right.next = head3
middle = head1
head1 = head3
break
else:
head2 = head2.next
return head