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 单链表的删除的主要内容,如果未能解决你的问题,请参考以下文章