标题
归并排序两个链表
思路
递归+中点分割链表+两个链表合并
def findmid(head):
fast = head
slow = head
while fast.next is not None and fast.next.next is not None:
fast = fast.next.next
slow = slow.next
rhead = slow.next
slow.next = None
return head,rhead
def merge_sort(head):
if head is None or head.next is None:
return head
lhead,rhead = findmid(head)
a = merge_sort(lhead)
b = merge_sort(rhead)
return merge_link(a,b)
def merge_link(l1,l2):
dummy = cur = Node()
head1 = l1
head2 = l2
while head1 is not None and head2 is not None:
if head1.value<=head2.value:
cur.next = head1
head1 = head1.next
elif head1.value>head2.value:
cur.next = head2
head2 = head2.next
cur = cur.next
if head1 is not None:
cur.next = head1
elif head2 is not None:
cur.next = head2
return dummy.next