《leetcode-go》常数级空间复杂度对链表进行排序

148. 排序链表 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 快慢指针 找中点//slow:(5个停在3,10个停在5) class Solution { public: ListNode* sortList(ListNode* head) { if(head==NULL||head->next==NULL) return head; // /*快慢指针 查找剧中节点*/ // ListNode* fast=head, *slow=head; // 阅读详情

在O(n log n)的时间内使用常数级空间复杂度对链表进行排序。

Sort a linked list in O(n log n) time using constant space complexity.

注意,一定要先判断前面的是不是nil,再判断后面的,第一个if卡了好长时间

package main

import "fmt"

type ListNode struct {
	Val  int
	Next *ListNode
}

func main() {
	a1 := new(ListNode)
	a1.Val = 3
	a2 := new(ListNode)
	a2.Val = 4
	a3 := new(ListNode)
	a3.Val = 2
	a1.Next = a2
	a2.Next = a3
	ret := sortList(a1)
	for ret != nil {
		fmt.Println(ret.Val)
		ret = ret.Next
	}
}

/**
 *
 * @param head ListNode类
 * @return ListNode类
 */
func sortList(head *ListNode) *ListNode {
	// write code here
	if head == nil || head.Next == nil {
		return head
	}
	var node = head
	var fastNode = head.Next
	for fastNode != nil && fastNode.Next != nil {
		node = node.Next
		fastNode = fastNode.Next.Next
	}
	midNode := node.Next
	rightNode := sortList(midNode)
	node.Next = nil
	leftNode := sortList(head)
	//全部合并到leftNode去
	newHead := &ListNode{}
	newNode := newHead
	for leftNode != nil && rightNode != nil {
		if leftNode.Val < rightNode.Val {
			newNode.Next = leftNode
			newNode = newNode.Next
			leftNode = leftNode.Next
		} else {
			newNode.Next = rightNode
			newNode = newNode.Next
			rightNode = rightNode.Next
		}
	}
	if leftNode != nil {
		newNode.Next = leftNode
	}
	if rightNode != nil {
		newNode.Next = rightNode
	}
	return newHead.Next
}

 

2021字节跳动校招秋招算法面试真题解题报告--leetcode148 排序链表,内含7种语言答案 148.排序链表 1.题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序 2.解题报告 针对nlogn的排序算法,主要有快速排序,归并排序和堆排序。其中,堆排序利用了数组的连续特性。所以这里不能采用。其次,在快速排序中,设计大量数字的交换且单链表因为只能单向遍历,使用partition不是很直观。 所以,本题采用归并排序链表版来实现。 具体思路如下: 1.使用快慢指针,找到链表的中点。 2.对链表的前半部分和后半部分分别排序。 3.将两部分合并。 代码 /** * Defi 阅读详情

相关推荐

【经典算法】LeetCode 148. 排序链表(Java/C/Python3实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度插入排序链表实现简单直观时间复杂度较高,为O(n^2)O(n^2)O(1)归并排序链表时间复杂度较低,为O(n log n)需要额外空间进行递归或合并操作O(n log n)O(n) 或 O(log n)(原地归并)注意:这里的空间复杂度是相对于链表本身大小n而言的。插入排序是原地排序,不需要额外空间(除了常数级别的空间),所以空间复杂度为O(1)。

2401_84427485的博客 1501

LeetCode题解(0148):常数级空间复杂度排序链表(Python)

题目:原题链接(中等) 标签:链表、链表-双指针、排序、排序-归并排序 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(NlogN)O(NlogN)O(NlogN) O(logN)O(logN)O(logN) 428ms (5.14%) Ans 2 (Python) O(NlogN)O(NlogN)O(NlogN) O(1)O(1)O(1) 264ms (32.29%) Ans 3 (Python) O(NlogN)O(NlogN)O(NlogN) O(1)

长行 612

【经典算法】Leetcode.83删除排序链表中的重复元素(Java/C/Python3/Go实现含注释说明,Easy)

方式优点缺点时间复杂度空间复杂度方式一(双指针迭代)不使用递归,内存占用稳定代码相对复杂,需要处理边界情况O(n)O(1)方式二(递归)代码简洁,逻辑清晰递归深度可能导致栈溢出,内存占用不稳定O(n)O(n)

2401_84427485的博客 2068

在O(n log n)时间内使用常数空间复杂度对链表进行排序

题目:在O(n log n)时间内使用常数空间复杂度对链表进行排序。思路:归并排序代码:public ListNode sortList(ListNode head) { // 0个节点 || 1个节点 if (head == null || head.next == null) return head; // &gt;= 2个节点 ListNode first =...

一整个宇宙换一颗红豆 4563

SAP WM模块事务码(TCODE)大全

OL07 Data transfer stor.bins LDK34->RLPLA 仓储位LDK34 ->RLPLA

matinal 當冬夜漸暖 。公众号:matinal 5846

AI for Science:GNN预测分子性质全流程详解与工业实践

从分子表示到工业落地,一文掌握图神经网络在药物研发与材料设计中的核心实战近年来,的浪潮正深刻变革着传统科研范式。在药物研发与材料设计领域,作为核心环节,已从传统的实验试错转向基于图神经网络(GNN)的智能计算。本文将深入解析GNN预测分子性质的,涵盖数据准备、模型设计、训练优化到工业部署,并揭秘前沿技术与实战案例。

datacanvas2426的博客 1674

在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ import java.util.LinkedList; import j...

weixin_30532369的博客 1257

C++11并发与多线程笔记(2) 线程启动、结束,创建线程多法、join,detach

第二节 线程启动、结束,创建线程多法、join,detach 一、范例演示线程运行的开始 程序运行起来,生成一个进程,该进程所属的主线程开始自动运行;当主线程从main()函数返回,则整个进程执行完毕 主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,线程也结束运行 整个进程是否执行完毕的标志是:主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了,此时如果其他子线程还没有执行完,也会被强行终止【此条有例外,以后会解释】 创建

qq_38231713的博客 1万+

leetcode 148 时间复杂度和常数级空间复杂度下,对链表进行排序。

package leetcode.sort; import java.util.Comparator; import java.util.LinkedList; import java.util.List; /** * @Description: 在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: 输入: -1->5->3->4-&gt...

qq_34823218的博客 476

避坑指南:锐浪报表PictureBox打印图像常见的5大问题及解决方案

本文深入剖析了锐浪报表(Grid++Report)中PictureBox控件打印图像时常见的五大难题,包括图像源加载机制、拉伸失真、动态加载失败、跨平台兼容性及性能优化。文章提供了从原理理解到实战解决方案的完整指南,帮助开发者有效规避图像打印中的常见陷阱,确保报表输出的稳定与高质量。

water的专栏 1148

通信模组性能调优

本文介绍了高通平台通信模组性能调优的方法,主要包括硬件加速技术和CPU负载优化。针对CPU负载优化,提出了内核RPS/RFS功能启用、网卡队列调整、中断均衡、CPU性能模式设置等措施。同时建议关闭热管理并加强散热,调整TCP接收/发送缓存大小以解决TCP异常报文问题。这些优化手段可显著提高整机吞吐率测试中的网络性能表现。

四儿家的小祖宗的博客 1359

【LeetCode】148. 排序链表

在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 根据时间复杂度选择归并排序,解题思路如下: 1.使用归并排序前,找到中间节点pmiddle,因为是链表排序所以我们要找到的是中间节点的前继节点,使用快慢指针可以完成,需要注意的是分隔成两个链表时,前链表的最后一个节点指向空。 2.对前后两部分再分别进行归并排序。 3.合并两个有序链表,同样最后一个节点指向空。 ...

syc233588377的博客 203

使用 MATLAB/Simulink 构建一个 核电站汽轮机与发电机协调控制系统 的仿真模型

在核电机组中,汽轮机-发电机系统是将核能最终转化为电能的关键环节。与火电机组不同,核反应堆的热惯性大、功率调节慢,因此汽轮机的控制策略需与反应堆特性相匹配,实现安全、稳定、高效的能量转换。维持发电机输出功率/频率稳定(响应电网调度)调节汽轮机进汽压力(匹配一回路蒸汽供应)实现“堆-机协调控制”保障机组在启停、变负荷、甩负荷等工况下的安全性本教程将带你使用构建一个核电站汽轮机与发电机协调控制系统汽轮机调速系统(调门控制)建模发电机与电网接口建模(同步机)

xiaoheshang_123的博客 188

leetcode 148. 排序链表 golang实现

描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: 输入: -1->5->3->4->0 输出: -1->0->3->4->5 思路 分治思想 1. 将链表切成两份 一直切到无法再切 2. 将切...

tzh_linux的专栏 1125

〖Python网络爬虫实战㊴〗- 极验滑块介绍(一)

我们对这个看到不陌生,现在,大多数平台都是用的是这个平台的验证码,我们今天来学习一下,极验滑块验证码的逆向,其他的都差不多。我们了解到这个平台提供了许多验证的方式。现在大多数还是滑块比较多,滑块验证码是一种常见的验证方式,其主要思路为用户通过拖动滑块来完成验证。具体流程如下:首先,用户需要进行滑块验证码的操作,网站会向用户展示一张图片,图片上通常会有一些随机的文字和背景干扰。用户需要通过鼠标拖动滑块,将其移动到指定位置上,通常是将滑块拖动到图片的相应位置上来完成验证。

爱吃饼干的小白鼠的博客 2879

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Leetcode148. 排序链表

Leetcode148. 排序链表 题目: 在 O(nlogn)O(n log n)O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: 输入: -1->5->3->4->0 输出: -1->0->3->4->5 题解: 归并排序+递归 java代码: /** * @param head * @ret

会流泪de鱼的博客 299

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Leetcode刷题篇】leetcode148 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 归并排序 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this..

Mind_programmonkey的博客 738

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode148. 排序链表

传送门 题目: 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 输入: 4->2->1->3 输出: 1->2->3->4 参考博客 对一个链表进行排序,且时间复杂度要求为 O(nlogn) ,空间复杂度为常量。一看到 O(nlogn)的排序,首先应该想到归并排序和快速排序,但是通常我们使用这两种排序方法时都是针对数组的,现在是链表了。 归并排序法:在动手之前一直觉得空间复杂度为常量不太可能,因为原来数组使用归并时,都是 O(N)的,需

lonelyVM的博客 226

LeetCode力扣Golang实现/链表 :21、83、141、142、160、206、234

​​​​​【Leetcode算法500题】目前B站最完整的数据结构算法教程,包含所有刷题攻略!这还没人看,我不更了!_哔哩哔哩_bilibili 指针移动: p = p.Next 21、合并两个有序链表 递归相较于指针解法更节省空间,因为涉及出栈和入栈的操作 刚开始没有引入head结点,直接在list1、list2上操作,他会报错 :cannot use assignment (list1.Next) = (mergeTwoLists(list1.Next, l2)) as value (solu

wmkkk_的博客 371

数据结构与算法之链表: LeetCode 148. 排序链表 (Ts, Py, Go版)

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

Wang的专栏 967

【LeetCode】148.排序链表

傻瓜爱用笨方法,本着能少动脑子和少写代码的原则,使用Go的标准库,实现链表数组的排序以及重新链接。利用Go标准库函数slices.SortFunc和cmp.Compare快速解决问题。

qq_46063517的博客 3498

【Leetcode】链表排序(逐步提高时空复杂度)

链表排序的逐步优化方法。

小朱小朱绝不认输的博客 970

Leetcode算法笔记-(链表篇)

本文是LeetCode算法入门刷题笔记,好记性不如烂笔头,多背然后自己多默写几遍自然就理解了。若有错误的地方也请各位大佬指正哈

Aurelia_H的博客 1247

LeetCode0148.排序链表 Go语言AC笔记

字节面试常考链表题,务必要吃透!go语言实现并附上详细备注的AC代码,效率优于官方题解!

Hexa_H的博客 446

leetcode 148. 排序链表

算法思想 :参考博客 :https://blog.youkuaiyun.com/qq_34364995/article/details/80994110#commentBox https://blog.youkuaiyun.com/taotao12312/article/details/69664351 归并排序每次递归需要用到一个辅助表,长度与待排序的表相等,虽然递归次数是O(log2n),但每次递归都会释放掉所占的辅...

vs974532452的博客 164
上一篇: 《leetcode-go》一条直线上的最多点数
下一篇: 《leetcode-go》插入法排序链表
less_cold
博客等级 码龄10年 40粉丝 364原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值