目录结构:
doubleLink.go
package link import ( "fmt" ) //HerosNode 链表节点 type HerosNode struct { ID int Name string pre *HerosNode 指针 next *HerosNode 指针 } InsertHerosNode 插入 func InsertHerosNode(head *HerosNode,newHerosNode *HerosNode) { tmp := head for { if tmp.next == nil { break } tmp = tmp.next } tmp.next = newHerosNode newHerosNode.pre = tmp } InsertHerosNodeByID 根据id从小到大插入 func InsertHerosNodeByID(head *HerosNode,1)"> head nil { tmp.next = newHerosNode newHerosNode.pre = tmp } if tmp.next.ID > newHerosNode.ID { tmp.next.pre = tmp tmp2 := tmp.next tmp.next = newHerosNode newHerosNode.next = tmp2 } else if tmp.next.ID == newHerosNode.ID { fmt.Printf(已经存在id为%d的节点\n,tmp.next.ID) else { tmp = tmp.next } } } DeleteHerosNode 删除 func DeleteHerosNode(head *HerosNode,ID ) { tmp := nil { fmt.Println(链表中没有该id) ID { if tmp.next.next == nil { tmp.next = nil } { tmp2 := tmp.next.next tmp.next = tmp2 tmp2.pre = tmp } tmp.next } } } FindHerosNode 查找 func FindHerosNode(head *HerosNode,1)"> ID { fmt.Println(找到了该idModifyHerosNode 修改 func ModifyHerosNode(head *HerosNode,1)">int,changeName ID { tmp.next.Name = changeName ForListHerosNode 显示信息 func ForListHerosNode(forHead *HerosNode) { fmt.Println(正向打印所有信息) tmp := forHead nil { fmt.Println(链表为空) return } { fmt.Printf(节点信息如下:id=%d,name=%s\n tmp.next 已显示所有信息 } } } BackListHerosNode 显示信息 func BackListHerosNode(head *----------------------) fmt.Println(反向打印所有信息var backHead *HerosNode { tmp = nil { backHead = } } backHead.pre if backHead.pre == head { fmt.Printf( } } }
main.go
package main import go_code/data_structure/link func main() { head := &link.HerosNode{} hero1 := &link.HerosNode{ ID: 1宋江2李逵4林冲3武松 link.InsertHerosNode(head,hero1) link.InsertHerosNodeByID(head,hero2) link.InsertHerosNodeByID(head,hero1) link.InsertHerosNodeByID(head,hero4) link.InsertHerosNodeByID(head,hero3) link.DeleteHerosNode(head,) link.FindHerosNode(head,1)">) link.ModifyHerosNode(head,1)">4,我是修改后的英雄) link.ForListHerosNode(head) link.BackListHerosNode(head) }
运行结果: