创建链表,并按奇偶分开,并排序
class ListNode(object):
def __init__(self, val):
self.val = val
self.next = None
class Solution(object):
def sortList(self, head):
if not head or not head.next:
return head
pre, slow, fast = None, head, head
#归并排序,找到中间部分
while fast and fast.next:
prev, slow, fast = slow, slow.next, fast.next.next
prev.next = None #分为两部分
l1 = self.sortList(head)
l2 = self.sortList(slow)
return self.merge(l1, l2)
def merge(self, l1, l2):
dummy = l = ListNode(None)
while l1 and l2:
if l1.val < l2.val:
l.next, l, l1 = l1, l1, l1.next
else:
l.next, l, l2 = l2, l2, l2.next
l.next = l1 if l1 else l2
return dummy.next
if __name__ == "__main__":
s = Solution()
l = head = ListNode(None)
for val in [0, 4, 1, 6, 7,9,8,7,1,5]:
l.next = ListNode(val)
l = l.next
head = head.next
li = s.sortList(head)
while li:
print(li.val, end=' ')
li = li.next
# 链表分为奇偶两部分并排序
head1, head2 = ListNode(None),ListNode(None)
p1, p2, p = head1, head2, head
while p:
if p.val % 2 == 1:
p1.next = p
p1 = p1.next
else:
p2.next = p
p2 = p2.next
p = p.next
p1.next = None
p2.next = None
head1 = head1.next
head2 = head2.next
li1 = s.sortList(head1)
print('\n')
while li1:
print(li1.val, end=' ')
li1 = li1.next
li2 = s.sortList(head2)
print('\n')
while li2:
print(li2.val, end=' ')
li2 = li2.next