《leetcode-go》插入法排序链表

用直接插入排序法对单链表进行排序 #include typedef struct node { int key; struct node *next; }SNode; void CreateLink (SNode *h,int R[],int n) //创建带头结点的单链表 { int i; SNode *s, *r; h = (SNode *)malloc (sizeof (SNode)); //采用尾 阅读详情

使用插入法排序链表

注意:一定要保持链表的完整性,否则容易丢数据

package main

import "fmt"

type ListNode struct {
	Val  int
	Next *ListNode
}

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

/**
 *
 * @param head ListNode类
 * @return ListNode类
 */
func sortList(head *ListNode) *ListNode {
	// write code here
	if head == nil || head.Next == nil {
		return head
	}
	newHead := &ListNode{
		Val:  0,
		Next: head,
	}
	lastNode := head
	node1 := head.Next
	for node1 != nil {
		node2 := newHead
		tmp := node1.Next
		lastTmp := node1
		for node2.Next != node1 {
			//从大到小
			if node1.Val > node2.Next.Val {
				node1.Next = node2.Next
				node2.Next = node1
				lastNode.Next = tmp
				lastTmp = lastNode
				break
			}
			//从小到大
			if node1.Val < node2.Next.Val {
				node1.Next = node2.Next
				node2.Next = node1
				lastNode.Next = tmp
				lastTmp = lastNode
				break
			}
			node2 = node2.Next
		}
		node1 = tmp
		lastNode = lastTmp
	}
	return newHead.Next
}

 

实现的go语言的结构体排序 用go语言实现的结构体排序,使用go的反射包(reflect),实现结构体按指定字段排序,字段类型目前支持int,int64,string,方便扩展任意基本类型,使用直接导入包,然后调用sortStruct(structArr, 'sorft_name', true) 立即下载

相关推荐

window系统 dlib库安装

1. 安装visual studio 1.1. 安装vs2017或以上版本 1.2. 我们需要安装使用C++的桌面开发,且必须选上用于Cmake的Visual C++工具 1.3. 安装完成后,将D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin 添加到环境变量PATH中 2 下载cmake文件,并添加环境变量 2.1 在c

@bangbang的博客 816

《零基础Go语言算法实战》【题目 4-7】实现链表的排序

借助分治算法的思想,递归对比两个链表中的每个元素的值的大小,然后将 K 个有序链。请用 Go 语言实现合并 K 个排序的链表并将其作为一个排序链表返回。【题目 4-7】实现链表的排序。《零基础Go语言算法实战》// 合并 K 个链表。② Go 语言实现。

shirdon-廖显东的博客 440

3款主流AIGC模型部署方案对比:本地、云端与混合架构的成本与性能分析

本文对比分析了3种主流AIGC模型部署方案(本地、云端与混合架构)的成本与性能差异,帮助企业在预算、性能和维护复杂度之间找到最佳平衡点。通过实际案例和详细数据,展示了不同部署方式在延迟、扩展性、数据隐私等方面的优劣势,为技术决策者提供实用参考。

weixin_33158887的博客 371

2024年最新【算法学习】剑指 Offer 64(2),2024年最新vue总结来了

--### c// 2的14次正好超过10000// 等差数列求和公式n * (n + 1) / 2public:// 2的14次正好超过10000// 等差数列求和公式n * (n + 1) / 2# 2的14次正好超过10000# 等差数列求和公式n * (n + 1) / 2ans = 0a = nb = n + 1// 2的14次正好超过10000// 等差数列求和公式n * (n + 1) / 2ans += a。

2401_84910839的博客 594

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1122

IIR数字滤波器原理,设计方法及嵌入式应用

基于STM32的二阶直接II型巴特沃斯低通滤波器设计方法及应用

weixin_38342580的博客 1万+

Go 算法 leetcode 148 排序链表

Go 算法 leetcode 148 排序链表题目链接答案 题目 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 链接 leetcode 148 排序链表 答案 /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func sortList(head *ListNode) *ListNode { i

kucfire 456

Qoder Quest 模式实战:从需求到代码的自动化开发

本文深入探讨Qoder Quest模式如何实现从需求到代码的自动化开发。通过编写清晰的Spec规格说明,Qoder能智能分解任务并在后台执行,生成高质量代码,大幅提升开发效率,让开发者专注于架构设计等创造性工作。

herb5的博客 1153

go双向链表排序

go双向链表排序

weixin_50060562的博客 182

腾讯云DBA面试(一面)

在第二阶段,根据RM返回的结果,如果涉及分布式事务的所有RM都返回可以提交, 则TM给RM发送commit的命令,每个RM实现自己的提交,同时释放锁和资源,然后RM反馈提交成功, TM完成整个分布式事务;根据事务所处的阶段,可以回滚到具体的版本,实现一致性。1.并发执行的事务,在prepare阶段,redo log先写文件缓存,第一个领头的事务,在等待n个事务后, 在第一个事务去刷写磁盘时,会把同组的其他的事务,也一起刷写到磁盘上,这样就减少了刷盘的次数,降低了磁盘的IOPS。分布式锁是怎么实现的?

u012565458的博客 1977

捷联惯导,其实没有你想象的那么复杂!(附:惯导嵌入式应用中需要的一些C代码)

摘要:捷联惯导系统将惯性测量单元固连于运动载体,通过核心算法实现导航解算。系统首先进行传感器误差补偿和初始对准,然后利用陀螺和加速度计数据,通过姿态更新算法(如四元数法)计算载体相对于地理系的姿态。加速度数据经比力方程转换后积分得到速度和位置,过程中需补偿圆锥误差和划船效应。捷联惯导通过数字平台替代物理平台,实现了载体坐标系与导航坐标系的实时转换,是当前惯性导航系统的主流方案。

victoryqian528的博客 270

golang中关于List链表的排序

前言 关于golang中list链表的排序操作文章少之又少,因此基于这个情况,特此写个简单的Demo供大家分享 需求背景 比如,现在有个需求,list链表中存入了用户信息,但是是无序的,需要根据用户的年龄和姓名,给list链表中的数据,进行简单排序 实现 1.定义用户结构体 type Person struct { Name string //名称 Age...

learn8more的博客 1556

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

此时我们的卡顿优化基本完成了,我们应该要考虑内存是否会泄漏,如果大家不知道哪些需要回收可以用leakcanary和android profiler进行内存检测,看代码有没有内存泄漏。

龚礼鹏的博客 2547

2021-03-17:手写代码:单链表插入排序。

2021-03-17:手写代码:单链表插入排序。 福大大 答案2021-03-17: 从链表的第二个节点开始遍历。当前节点的左边所有节点一定是有序的。先比较当前节点和左邻节点,如果左邻节点小于等于当前节点,直接下个节点;如果左邻节点大于当前节点,从链表的有序部分的第一个节点开始遍历,找到当前节点小于有序部分的某个节点,然后插入进去。 代码用golang编写,代码如下: package main import "fmt" func main() { //head := &ListNode{

福大大架构师每日一题 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

力扣(四) - 合并K个升序链表

给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6 示例 2: 输入:lists = [] 输

Touale的博客 182

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

go实现排序的链表

链表的数据结构比较线性数组,优点是 可以方便的对任意的位置进行插入和删除。 这一特性使得它很适合于应用在排序等场景下,由于golang目前类库还不是很完善,在java中可以很简单的使用api提供的支持完成对list或者map的排序,在使用go时就没有那么幸运了,可能需要自己去实现。 下面的例子就是使用go package 中的LinkedList实现的排序的链表。 有几个功能特性: ...

weixin_33994429的博客 231

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

115、对链表进行插入排序

题目描述: 使用List放入ListNode,然后依据插入排序进行,这个时间少,空间复杂度低 代码: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * }...

qq_34446716的博客 183

Go语言顺序链表实现

关于Go语言的链表 package main import ( "fmt" ) const maxsize = 100 type ElemType int type SeqList struct { elem[maxsize] ElemType length int } //初始化链表 func InitList(list *SeqList) { list.length = 0 } //链表插入 func InsertList(L *SeqList,x ElemType,i int) bo

like_gang的博客 217

七. Go学习:排序、结构体、链表和二叉树

本文介绍了结构体这一自定义数据类型,以及排序(冒泡、简单选择、插入和快爬)、链表和二叉树这三种简单的数据结构(通过代码) 目录 排序 一. 冒泡排序 二. 简单选择排序 三. 插入排序 四. 快速排序 结构体 链表 二叉树 排序 一. 冒泡排序 冒泡排序:从小往上两两比较相邻记录的关键字,反序则交换,直至有序。最小数像泡泡一样从小往上走. package main import ( "fmt" ) func sortBuble(a []int) { for i := 0;

ouyangyiwen的博客 246

单向链表操作详解(二)[The End]

/*接着讲(测试编译时,请把相应的函数及测试代码放到上一讲代码的相关地方):排序(选择、插入、冒泡)插入(有序)*//*===============================================作者:rerli时间:2003-12-08目的:学习单向链表的创建、修改、删除、  插入(无序、有序)、输出、  排序(选择、插入、冒泡)、反序说明:编译没有任何

rerli的专栏 7822

插入法链表排序

template struct Node { T data; Node *next; //此处也可以省略 }; template class LinkList { public: LinkList( ); //建立只有头结点的空链表 Link

lichengyu的专栏 1090

对链表排序,用插入排序

本题源自LeetCode -------------------------------------------------------------------- 用插入法对链表排序 非递归: ListNode *insertionSortList(ListNode *head) { if(head==NULL || head->next==NULL)

i_am_bird的博客 287

算法基础之插入排序(GO实现)

插入排序是排序算法中比较基础的一种,当数据量少的时候,性能也是不错的。直接拿一个例子讲解会比较直观。 伪代码如下: for j=2 to A.length key = A[j]; i = j - 1; while i > 0 && A[i] > key A[i+1] = A[i]; i -= 1; A[i+1] = key 插入排序的思想 数组 : [...

学无止境 527

链表插入排序

1.问题描述:用插入排序对链表排序 2.思路:例如Given 1->3->2->0->null, return 0->1->2->3->null 首先建立一个新的节点为0.并令dummy指向0,再向0后面插入给定链表的第一个节点(在这之前要用a指向head->next,这样方便后面元素的插入),插入第一个节点之后,head的指向向后移动,即为开始时a的指向,然后,如果p->next->val>

zcy0108的博客 289

如何根据链表节点数据大小对链表节点进行排序

对链表排序有两种方法: (1)比较了两个节点的大小后,对指针进行改变,从而交换节点的顺序; (2)比较了两个节点的大小后,只交换数据域,而不改变指针,从而交换节点的顺序。 第二种办法比较简单,本文主要对第二种方法进行讲解。 链表节点排序算法,采用(冒泡排序)。 定义一个指针end,end最开始时赋值为空,再经过一次比较后,找到一个最大值,将该最大值的指针赋给end;每次循环找到该次循环中的最大值,都将其指针赋值给end,等于说end每次循环结束,都会向前移动一个节点,这样就可以根据end和头节点是否相等作为

weixin_42097108的博客 5744

单链表的快速排序

单链表的特点是:单向。设头结点位head,则最后一个节点的next指向NULL。如果只知道头结点head,请问怎么将该链表排序?                设结点结构为 struct Node{ int key; Node* next; };           那么一般人见到这种题目,立马就会想到

wumuzi520的专栏 2万+
上一篇: 《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、付费专栏及课程。

余额充值