golang数据结构之双链表

目录结构:

 

 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)
}

运行结果:

 

 

相关文章

类型转换 1、int转string 2、string转int 3、string转float ...
package main import s "strings" import...
类使用:实现一个people中有一个sayhi的方法调用功能,代码如...
html代码: beego代码:
1、读取文件信息: 2、读取文件夹下的所有文件: 3、写入文件...
配置环境:Windows7+推荐IDE:LiteIDEGO下载地址:http:...