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
	



// 10、删除一个节点
func DelHerNode(head *HeroNode, id int) 
	temp := head
	flag := false

	// 找到要删除的节点
	for 
		// 说明链表的最后
		if temp.next == nil 
			break
		 else if temp.next.no == id 
			// 找到了
			flag = true
			break
		
		temp = temp.next
	

	// 删除
	if flag 
		temp.next = temp.next.next
	 else 
		fmt.Println("要删除的id不存在。")
	


// 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)

	// 11 删除
	fmt.Println()
	DelHerNode(head, 2)
	DelHerNode(head, 3)
	ListHeroNode(head)

PS E:\\TEXT\\test_go\\one> go run .\\main.go
[1,宋江,及时雨]==>[2,卢俊义,玉麒麟]==>[3,林冲,豹子头]==>
[1,宋江,及时雨]==>
PS E:\\TEXT\\test_go\\one>

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

单链表的创建插入删除遍历的Go实现

单链表的创建插入删除遍历的Go实现

轻松实现单链表——Java

Go 反转链表单链表的添加和显示单链表的添加和显示控制反转

Go 反转链表单链表的添加和显示单链表的添加和显示控制反转

数据结构之链表(JAVA)