python练习——插入排序

插入排序练习——对链表进行插入排序

插入排序

插入排序是排序的一种。以链表为例,假如对输入数据进行升序排列,那么首先要在创建一个节点,数值为负无穷小,然后在新节点后面链接给出的链表数据
在这里插入图片描述然后取第一个节点为sort_list,第二个节点为当前节点current_node(为方便起见,画成两条链表,实际上是一条链表)
在这里插入图片描述
将当前节点与前一个节点在数值上进行比较,如果当前节点的数值大于或等于前一个节点的数值,那么保持当前链表的结构,并将当前节点和上一个节点的指针分别指向它们的下一个节点
在这里插入图片描述
如果当前节点的数值小于前一个节点的数值,那么将上一个节点指向当前节点的下一个节点,并将当前节点与取出当前节点后的链表的节点进行数值上的比较,找到当前节点正确的位置,将它插入进去
在这里插入图片描述

接下来将sort_list节点的下一个节点作为当前节点,供接下来的排序过程
在这里插入图片描述
重复这个过程,直到链表顺序为升序排列为止
在这里插入图片描述

Leetcode对链表进行插入排序

问题描述
对链表进行插入排序。

示例
输入:4->2->1->3
输出:1->2->3->4

思考
就是一个简单的插入排序过程。

具体代码如下

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def insertionSortList(self, head: ListNode) -> ListNode:
    	sort_list = ListNode(-inf)
    	sort_list.next = head
    	current_node = head
    	sort_list_copy = sort_list
    	while current_node != None:
    		#如果当前节点大于或等于前一个结点,那么链表顺序不变,并将两个节点指针向后移一位
    		if current_node.val >= sort_list.val:
    			sort_list = sort_list.next
    			current_node = sort_list.next
    			continue
    		#将打乱顺序的节点(当前节点)从链表中取出
    		sort_list.next = current_node.next
    		#设置一个链表sort,用来寻找当前节点合适的插入位置
    		sort = sort_list_copy
    		#寻找当前节点合适的插入位置
    		while current_node.val >= sort.next.val:
    			sort = sort.next
    		#将当前节点插入到链表中
    		current_node.next = sort.next
    		sort.next = current_node
    		#将sort_list的下一个节点设为当前节点
    		current_node = sort_list.next
    	return sort_list_copy.next
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页