Leetcode_Sort --147. Insertion Sort List [medium]

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中进行排序,当旧链表遍历完成的时候,排好序的新链表就生成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值