zoukankan      html  css  js  c++  java
  • leetcode 之 Insertion Sort List

    题目描述:  难度: 中等

    Sort a linked list using insertion sort.

    中文描述: 

    使用插入排序对一个链表进行排序.

    解析: 插入排序就不多说了,主要看插入排序对于单链表来说怎么做. 在单链表中,由于无法拿到链表的前一个元素,所有每次遍历必须从head 开始.找到最后一个比当前待排序节点小的节点.  如 4 ->1 ->2 ->3   首先从cur = 4 开始, 判断cur.next 与cur 的大小, 并交换,得到 1->4->2->3,交换后, cur 不变.继续比较cur.next与cur 的大小, 及4和2 比较, 这时, 4 是大于2的,我们从head开始,找到第一个小于2的元素, 即head =1 ,我们需要判断,如果当前是head,做特殊处理.为了避免这种情况, 但是我们可以插入一个"头"指针,其next指向head.

    代码如下:

     1 # Definition for singly-linked list.
     2 # class ListNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.next = None
     6 
     7 class Solution(object):
     8     def insertionSortList(self, head):
     9         """
    10         :type head: ListNode
    11         :rtype: ListNode
    12         """
    13         fh = ListNode(0)
    14         fh.next = head
    15         cur = head
    16         while cur and cur.next:
    17             if cur.next.val < cur.val:
    18                 pre = fh
    19                 while pre.next.val < cur.next.val:
    20                     pre = pre.next
    21                 tmp = cur.next
    22                 cur.next = tmp.next
    23                 tmp.next = pre.next
    24                 pre.next = tmp
    25             else:
    26                 cur = cur.next
    27         return fh.next
    28                     
    ~~~~~
  • 相关阅读:
    第六日会议博客
    第五日会议博客
    第四日会议博客
    第三日会议博客
    第二日会议博客
    第一日会议博客
    Alpha总结展望——前事不忘后事之师
    请坐,我们是专业团队——Alpha冲刺
    微信小程序测试总结
    WeChair项目Beta冲刺(4/10)
  • 原文地址:https://www.cnblogs.com/missmzt/p/5481031.html
Copyright © 2011-2022 走看看