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
指针交换如图所示


浙公网安备 33010602011771号