Sort a linked list using insertion sort.
用插入排序方法对链表进行排序
A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.
With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list
Algorithm of Insertion Sort:
1、Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.
2、At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there.
3、It repeats until no input elements remain.
Example 1:
Input: 4->2->1->3
Output: 1->2->3->4
Example 2:
Input: -1->5->3->4->0
Output: -1->0->3->4->5
Solution:
Python
class Solution:
def insertionSortList(self, head):
new_link_list = None
while head:
node = head
head = head.next
node.next = None
new_link_list = self.insert(new_link_list , node)
return new_link_list
def insert(self , head , node):
node.next = head
head = node
while node.next and node.val > node.next.val:
node.val , node.next.val = node.next.val , node.val
node = node.next
return head
代码解释:
本代码是Discuss上的一个解决方案。
代码首先定义了两个函数insertionSortList和insert,insertionSortList函数用来对旧链表进行遍历,insert函数用来对新链表插入整理。insertionSortList首先定义了一个新的空链表:new_link_list,然后链表的排序在这个新的空链表上逐渐生成。insertionSortList中的node是一个指针,依次遍旧历链表,其所指向的链表元素就是即将插入new_link_list中的元素,head指向node的下一个元素,在链表不为空时用于更新node指针,node.next = None我觉得是用来取链表中的一个元素,而不是将该元素之后的剩余链表都取出来;insert函数用于对链表排序,排序之后的链表是在new_link_list上生成的,取出insertionSortList中的node,将它插入到new_link_list中的头结点,然后用node的值与新链表中其余的值比较,如果node的值比其后面的值大,就交换数值,其意思就是先把node设置为new_link_list的头结点,然后依次向后挪到合适的位置上,返回的是new_link_list这个排好序的链表。旧的链表元素依次插入到new_link_list中进行排序,当旧链表遍历完成的时候,排好序的新链表就生成了。