Go 单链表有序插入

Posted 知其黑、受其白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 单链表有序插入相关的知识,希望对你有一定的参考价值。

阅读目录

单链表有序插入

package main

import (
	"fmt"
)

// 1、定义一个 HeroNode
type HeroNode struct 
	no       int
	name     string
	nickname string
	next     *HeroNode


// 4、给链表出入一个节点
// 编写第一种插入方法,在单链表的最后加入
func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) 
	// 思路
	// 4.1、先找到改链表的最后这个节点
	// 4.2、创建一个辅助节点【跑龙套,帮忙】
	temp := head
	for 
		// 表示找到最后
		if temp.next == nil 
			break
		
		// 让temp不断的指向下一个节点
		temp = temp.next
	
	// 3、将 newHeroNode 加入到链表的最后
	temp.next = newHeroNode


// 9、给链表出入一个节点
// 编写第一种插入方法,根据no的编号从小到达插入..
func InsertHeroNode2(head *HeroNode, newHeroNode *HeroNode) 
	// 思路
	// 9.1、找到适当的节点
	// 9.2、创建一个辅助节点【跑龙套,帮忙】
	temp := head
	flag := true
	// 让插入的节点的no,和temp的下一个节点的no比较
	for 
		// 说明链表的最后
		if temp.next == nil 
			break
		 else if temp.next.no > newHeroNode.no 
			// 说明 newHeroNode 就应该插入到temp后面
			break
		 else if temp.next.no == newHeroNode.no 
			// 说明我们的链表已经有这个no,就不能插入。
			flag = false
			break
		
		temp = temp.next
	

	if !flag 
		fmt.Println("对不起,已经存在no=", newHeroNode.no)
		return
	 else 
		newHeroNode.next = temp.next
		temp.next = newHeroNode
	



// 5、显示链表的所有节点信息
func ListHeroNode(head *HeroNode) 
	// 5.1、创建一个辅助节点【跑龙套,帮忙】
	temp := head
	// 5.2、先判断该链表是不是一个空的链表
	if temp.next == nil 
		fmt.Println("空空如也...")
		return
	
	// 5.3、遍历这个链表
	for 
		// 打印第一个值
		fmt.Printf("[%d,%s,%s]==>",
			temp.next.no,
			temp.next.name,
			temp.next.nickname)

		// 判断是否链表最后一个
		temp = temp.next
		if temp.next == nil 
			break
		
	


func main() 
	// 2、先创建一个头节点
	head := &HeroNode
	// 3、创建一个新的 HeroNode
	hero1 := &HeroNode
		no:       1,
		name:     "宋江",
		nickname: "及时雨",
	
	// 8、创建一个新的 HeroNode
	hero2 := &HeroNode
		no:       2,
		name:     "卢俊义",
		nickname: "玉麒麟",
	

	hero3 := &HeroNode
		no:       3,
		name:     "林冲",
		nickname: "豹子头",
	

	hero4 := &HeroNode
		no:       3,
		name:     "无用",
		nickname: "智多星",
	

	// 6、加入
	InsertHeroNode2(head, hero3)
	InsertHeroNode2(head, hero1)
	InsertHeroNode2(head, hero2)
	InsertHeroNode2(head, hero4)
	// 7、显示
	ListHeroNode(head)

PS E:\\TEXT\\test_go\\one> go run .\\main.go
[1,宋江,及时雨]==>[2,卢俊义,玉麒麟]==>[3,林冲,豹子头]==>
PS E:\\TEXT\\test_go\\one> go run .\\main.go
对不起,已经存在no= 3
[1,宋江,及时雨]==>[2,卢俊义,玉麒麟]==>[3,林冲,豹子头]==>
PS E:\\TEXT\\test_go\\one> go run .\\main.go
[1,宋江,及时雨]==>[2,卢俊义,玉麒麟]==>[3,无用,智多星]==>[3,林冲,豹子头]==>
PS E:\\TEXT\\test_go\\one> go run .\\main.go
对不起,已经存在no= 3
[1,宋江,及时雨]==>[2,卢俊义,玉麒麟]==>[3,林冲,豹子头]==>
PS E:\\TEXT\\test_go\\one>

以上是关于Go 单链表有序插入的主要内容,如果未能解决你的问题,请参考以下文章

Java单链表双端链表有序链表实现

栈和队列----向有序的环形单链表中插入新节点

[算法]向有序的环形单链表中插入新节点

同时创建两条单链表,头插法插入节点,遍历,查找,删除,求长度,冒泡排序,反转,2条有序链表链接成一条链表后依然有序

链表习题-有一个带头结点的单链表,编写算法使其元素递增有序

java-----单链表