题目思路:
可以理解为利用两个指针,一个对整个链表进行遍历,另一个在已经遍历过的线段寻找插入点。(建议画图便于理解)
利用
class Solution: def insertionSortList(self, head: ListNode) -> ListNode: # 首先判断链表是否为空 if not head: return head # 令dummy.head指向head,创建哑节点是为了方便将值插入头节点之前。 dummyhead = ListNode(0) dummyhead.next = head # lastsorted可以看成已经排序了的列表 lastsorted = head cur = head.next while cur: if lastsorted.val <= cur.val: lastsorted = lastsorted.next else: pre = dummyhead # 寻找cur值应该插入的点 while pre.next.val <= cur.val: pre = pre.next lastsorted.next = cur.next cur.next = pre.next pre.next = cur # 继续遍历下一个点 cur = lastsorted.next return dummyhead.next
时间复杂度: