题目描述: 难度: 中等
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