阅读目录
- 单链表的删除
单链表的删除
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>