对链表进行插入排序
利用插入排序的思想,当前节点和下一个节点进行比较,找到当前值大于下一个值的节点A,接着将该节点A的方向指向节点的下下个位置C,找到最后一个个比当前节点的下一个节点B的值还有小的节点E,将节点B的方向指向节点E的下一个节点Q,再将节点E的方向指向节点B,完成整个两两交换的过程;
举例来讲如下:
class Solution(object):
def insertionSortList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
cur = head
# 新建一个无用的节点
dummy = ListNode(0)
dummy.next = head
while cur.next:
if cur.val <= cur.next.val:
cur = cur.next
else:
next_node = cur.next
cur.next = next_node.next
prev_node = dummy
# 找到最后一个比下一个节点的值还要小的节点
while prev_node.next.val <= next_node.val:
prev_node = prev_node.next
next_node.next = prev_node.next
prev_node.next = next_node
return dummy.next
原文:https://www.cnblogs.com/George1994/p/10549088.html