前端算法-排序链表

简介: 前端算法-排序链表

题目

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

输入: head = [-1,5,3,4,0]
输出: [-1,0,3,4,5]

思路一

我们这里使用快慢指针结合递归进行实现,慢指针走一步,快指针走两步,这样的话快指针走到最后,慢指针正好走到一半,我们先判断一下head参数和head的next参数其中一项是否为空,如果是则为单节点或者空节点,直接将head参数返回出去即可,然后声明一个慢指针变量slow值为head,在声明一个快指针变量quick他的值为head的next参数,然后使用while进行循环,循环的条件为当前的quick参数不为null和qiuck的next参数不为null,只要满足条件则一直循环,在循环中我们将slow变量和quick变量重新赋值,将slow的值变为当前slow变量的next参数,quick值为quick的next.next参数,循环结束后声明一个mid变量,他是一个中间值,他的值是slow变量的next参数,然后我们再讲slow的next参数重新赋值为null,然后在声明left变量,他的值是我们使用当前sortList函数把当前的head参数传递进去进行左边递归排序,然后在声明一个right变量,我们同left变量只不过把递归的参数换成mid变量,然后我们声明一个node变量,模拟的指针节点,我们将里面的val值赋值为0,next参数赋值为null,然后在声明一个res变量,他的值为node,我们在使用while进行循环,循环条件为当前left和right变量都不为null的情况下就会循环,在循环中我们声明一个空字符串val变量,然后left变量的val参数和right变量的val参数进行比较大小,如果当前的left变量的大,则将val赋值为left,且将left的值重新赋值,如果left的next存在则赋值给left变量,否则就将null赋值给left变量,如果right变量大,如left变量一样进行赋值和对val变量的更改,最后将nede的next参数重新赋值为val变量,nede的变量重新赋值为node.next参数,实现nede节点下移操作,循环完成后进行判断当前left变量如果存在则将left赋值给node的next参数,如果right变量存在则将其赋值给node的next变量,最后将res.next返回出去

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var sortList = function(head) {
    if (!head || !head.next) {
          return head
    }
    let slow = head
    let quick = head.next 
    while(quick != null && quick.next != null) { 
        slow = slow.next
        quick = quick.next.next
    }
    let mid = slow.next 
    slow.next = null 
    let left = sortList(head) 
    let right = sortList(mid) 
    let node = {val: 0, next: null} 
    let res = node
    while(left && right) {
        let val = ''
        if (left.val < right.val) { 
            val = left
            left = left.next || null
        } else {
            val = right
            right = right.next || null
        }
        node.next = val 
        node = node.next 
    }
    if (left) { 
       node.next = left
    }
    if (right) {
        node.next = right
    }
    return res.next
};


相关文章
|
10天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
|
11天前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
116 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
12天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
132 1
|
19天前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
|
8天前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
|
13天前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
70 0
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
2月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
147 3
|
6月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
104 0

热门文章

最新文章