实现单链表的增删查改。
目录如下:
singleLink.go
package link import ( "fmt" ) //HeroNode 链表节点 type HeroNode struct { ID int Name string next *HeroNode //指针 } //InsertHeroNode 插入 func InsertHeroNode(head *HeroNode, newHeroNode *HeroNode) { tmp := head for { if tmp.next == nil { break } tmp = tmp.next } tmp.next = newHeroNode } //InsertHeroNodeByID 根据id从小到大插入 func InsertHeroNodeByID(head *HeroNode, newHeroNode *HeroNode) { tmp := head for { if tmp.next == nil { tmp.next = newHeroNode break } if tmp.next.ID > newHeroNode.ID { tmp2 := tmp.next tmp.next = newHeroNode newHeroNode.next = tmp2 break } else if tmp.next.ID == newHeroNode.ID { fmt.Printf("已经存在id为%d的节点 ", tmp.next.ID) break } else { tmp = tmp.next } } } //DeleteHeroNode 删除 func DeleteHeroNode(head *HeroNode, ID int) { tmp := head for { if tmp.next == nil { fmt.Println("链表中没有该id") break } if tmp.next.ID == ID { if tmp.next.next == nil { tmp.next = nil } else { tmp2 := tmp.next.next tmp.next = tmp2 } break } else { tmp = tmp.next } } } //FindHeroNode 查找 func FindHeroNode(head *HeroNode, ID int) { tmp := head for { if tmp.next == nil { fmt.Println("链表中没有该id") break } if tmp.next.ID == ID { fmt.Println("找到了该id") break } else { tmp = tmp.next } } } //ModifyHeroNode 修改 func ModifyHeroNode(head *HeroNode, ID int, changeName string) { tmp := head for { if tmp.next == nil { fmt.Println("链表中没有该id") break } if tmp.next.ID == ID { tmp.next.Name = changeName break } else { tmp = tmp.next } } } //ListHeroNode 显示信息 func ListHeroNode(head *HeroNode) { tmp := head if tmp.next == nil { fmt.Println("链表为空") return } for { fmt.Printf("节点信息如下:id=%d,name=%s ", tmp.next.ID, tmp.next.Name) tmp = tmp.next if tmp.next == nil { fmt.Println("已显示所有信息") break } } }
main.go
package main import "go_code/data_structure/link" func main() { head := &link.HeroNode{} hero1 := &link.HeroNode{ ID: 1, Name: "宋江", } hero2 := &link.HeroNode{ ID: 2, Name: "李逵", } hero4 := &link.HeroNode{ ID: 4, Name: "林冲", } hero3 := &link.HeroNode{ ID: 3, Name: "武松", } // link.InsertHeroNode(head, hero1) // link.InsertHeroNode(head, hero2) // link.InsertHeroNode(head, hero4) // link.InsertHeroNode(head, hero3) link.InsertHeroNodeByID(head, hero2) link.InsertHeroNodeByID(head, hero1) link.InsertHeroNodeByID(head, hero4) link.InsertHeroNodeByID(head, hero3) link.DeleteHeroNode(head, 3) link.FindHeroNode(head, 4) link.ModifyHeroNode(head, 4, "我是修改后的英雄") link.ListHeroNode(head) }
运行结果: