147. 对链表进行插入排序

147. 对链表进行插入排序

题意

对链表进行插入排序

解题思路

利用插入排序的思想,当前节点和下一个节点进行比较,找到当前值大于下一个值的节点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
posted @ 2019-03-17 21:40  banananana  阅读(400)  评论(0编辑  收藏  举报