Insertion Sort List

原题地址:http://oj.leetcode.com/problems/insertion-sort-list/

题意:对链表进行插入排序。

思路:1)找到第一个不满足升序的元素 2)插入位置指针pre从头部开始找插入位置 3)使用temp变量记录待插入元素,按示例图所示,由右至左改变各个元素的指针 

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     # @param {ListNode} head
 9     # @return {ListNode}
10     def insertionSortList(self, head):
11         if not head:
12             return head
13         dummyhead = ListNode(0)                     #为链表加一个头节点(经典技巧)
14         dummyhead.next = head
15         curr = head
16         while curr.next:
17             if curr.next.val < curr.val:            #如果链表是升序的,那么curr指针一直往后移动
18                 pre = dummyhead                     #直到一个节点的值小于前面节点的值
19                 while pre.next.val < curr.next.val: #然后寻找插入的位置
20                     pre = pre.next
21                 tmp = curr.next                     #变换指针
22                 curr.next = tmp.next
23                 tmp.next = pre.next
24                 pre.next = tmp
25             else:
26                 curr = curr.next
27         return dummyhead.next

指针交换如图所示

posted @ 2015-07-02 23:18  Voyager.1  阅读(98)  评论(0)    收藏  举报