3个考点:
第一个是如何把原始的nodelist进行分治,分割到最小的单元, 采用递归dfs方式
第二个考点是:merge 归并排序 ,以及细节考点:过程中考虑到 创建的新node 如何和之前的节点进行指针的拼接
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def sortList(self, head: Optional[ListNode]) -> Optional[ListNode]:
#判空处理 && 递归到 node->null 的情况
if (not head) or (not head.next):
return head
slow=head
fast =head.next
while fast and fast.next:
slow =slow.next
fast =fast.next.next
#后半部分
second_half_head=slow.next
#前半部分的末尾切断
slow.next =None
#2.排序
sorted_first_half =self.sortList(head)
sorted_second_half= self.sortList(second_half_head)
#3.merge
return self.merge(sorted_first_half,sorted_second_half)
def merge (self,left,right):
#创建一个新的
dummy_head=ListNode(-1)
tail =dummy_head
while left and right :#2个list都有节点迭代时候
if left.val <right.val:
tail.next=left
left=left.next
else:
tail.next =right
right=right.next
tail =tail.next
if left :
tail.next =left
else:
tail.next =right
return dummy_head.next