鱼儿慢慢游~~

导航

 

题目描述:  难度: 中等

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                     

 

posted on 2016-05-11 10:30  miss_UU  阅读(171)  评论(0编辑  收藏  举报