zoukankan      html  css  js  c++  java
  • 每日一题20201120(147. 对链表进行插入排序)

    147. 对链表进行插入排序

    image-20201120134633194

    思路

    维护一个排好序的链表,剩下的值如果比已排好的大,直接放到尾部,如果比之前小,则从链表头遍历,找到对应的位置并插入。
    
    为了很好找到链表头,需要设置一个哑节点。
    
    # 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:
            # 1. 如果链表为空,直接return None
            if head is None:
                return None
            # 2. 创建一个哑节点, 指向head
            pre = ListNode(0)
            pre.next = head
    
            # 3. sorted_data为已经排好序的数据,current为当前要排序的元素
            sorted_data = head
            current = head.next
            
            # 4. 循环的结束条件是current走到None也就是走到最后一个元素
            while current is not None:
                # 当最后一个排好序的元素的值比待排序的值小,则sorted_data后移一位
                if sorted_data.val <= current.val:
                    sorted_data = sorted_data.next
                else:
                    # prev为头节点,为了不影响哑节点
                    prev = pre
                    # 找到排好序的第一个大于当前值的节点
                    while prev.next.val <= current.val:
                        prev = prev.next
                    # 这里要注意,prev目前指向的是第一个大于当前值的节点
                    # 这里sorted_data.next = current.next
                    # 是因为当前值总是在sorted_data的下一位
                    # 这里相当于是把当前节点撤下,挪到前面去
                    sorted_data.next = current.next
                    current.next = prev.next
                    prev.next = current
                # 当前节点继续走,往后挪一位
                current = sorted_data.next
            # 返回哑节点的下一位即可
            return pre.next
    
    

    image-20201120144152739

  • 相关阅读:
    到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf
    陀螺仪、加速计和磁力计
    UIImage加载图片的方式以及Images.xcassets对于加载方法的影响
    Java-Jdbc
    3.1 基本数据类型
    第三章 数据类型和变量
    2.2.4 给java应用打包
    2.2.3 运行java程序
    2.2.2 编译java源文件
    2.2.1 jdk简介
  • 原文地址:https://www.cnblogs.com/we8fans/p/14027752.html
Copyright © 2011-2022 走看看