题目思路:
可以理解为利用两个指针,一个对整个链表进行遍历,另一个在已经遍历过的线段寻找插入点。(建议画图便于理解)
利用
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
时间复杂度: