main.go
// Go语言·数据结构
package main
import (
"fmt"
)
var content string = `
————————————————Go语言·数据结构————————————————————
一、链表
是有序的列表,
二、单链表
头节点:
用来标识链表的头,本身不存放数据。
`
// 定义一个节点
type HeroNode struct {
no int
name string
nickname string
next *HeroNode //表示指向下一个节点
}
// 在单链表的最后加入。
func PushSingleLinkNode(headNode *HeroNode,nextNode *HeroNode) {
// 思路
// 1.先找到该链表最后的节点。
// 2.创建一个辅助节点
temp := headNode
for {
// 找到了链表最后的节点
if temp.next == nil{
break
}
// 不断的指向下一个节点
temp = temp.next
}
//最后的节点指向下一个节点
temp.next = nextNode
}
// 在单链表的最后加入。 有序的
func PushSingleLinkNodeSort(headNode *HeroNode,nextNode *HeroNode) {
// 思路
// 1.先找到该链表适当的节点。
// 2.创建一个辅助节点
var flag = true
temp := headNode
for {
// 找到了链表最后的节点
if temp.next == nil{
break
}else if temp.next.no>nextNode.no{
// 说明nextNode接口,就应该直接插入到temp后面
break
}else if temp.next.no==nextNode.no{
// 链表中已经存在咯,就不允许插入
flag = false
break
}
// 不断的指向下一个节点
temp = temp.next
}
if !flag {
fmt.Println("链表中已经存在咯,就不允许插入!")
}else{
nextNode.next,temp.next = temp.next, nextNode
}
}
// 打印链表
func ListSingleLinkNode(head *HeroNode) {
// 1.先找到该链表最后的节点。
// 2.创建一个辅助节点
temp := head
if temp.next == nil{
fmt.Println("链表空空如也~~~")
}
// 遍历链表
for {
fmt.Printf("[%d,%s,%s]===>",
temp.next.no,temp.next.name,temp.next.nickname)
// 不断的指向下一个节点
temp = temp.next
// 最后一个节点咯。
if temp.next == nil{
break
}
}
}
func PopSingleLinkNode(head *HeroNode,id int) {
var flag = false
temp := head
for {
// 找到了链表最后的节点
if temp.next == nil{
break
}else if temp.next.no==id{
flag = true
break
}
// 不断的指向下一个节点
temp = temp.next
}
if flag {
fmt.Println(temp.name)
temp.next = temp.next.next
}else{
fmt.Println("删除的节点不存在~~")
}
}
func main() {
// 1.先创建头节点,空的,默认值
head := &HeroNode{}
// 创建一个新的节点
next := &HeroNode{
no:1,
name:"宋江",
nickname :"及时雨",
}
PushSingleLinkNodeSort(head, next)
next2 := &HeroNode{
no:4,
name:"林冲",
nickname :"豹子头",
}
PushSingleLinkNodeSort(head, next2)
next3 := &HeroNode{
no:2,
name:"卢俊义",
nickname :"玉麒麟",
}
PushSingleLinkNodeSort(head, next3)
next4 := &HeroNode{
no:3,
name:"吴用",
nickname :"智多星",
}
PushSingleLinkNodeSort(head, next4)
ListSingleLinkNode(head)
fmt.Println()
PopSingleLinkNode(head, 2)
ListSingleLinkNode(head)
fmt.Println()
}
网友评论