单向链表的一种Go语言实现

package mainimport "fmt"type Node struct {    no int    name string    next *Node}//实现尾部插入一个节点到链表(队列Push的一种实现)func InsertTail(head *Node, newNode *Node){    //先找到链表的最初一个节点,须要放弃头结点不动,这里创立一个两头长期节点    temp := head    //遍历链表直到最初一个节点进行插入    for {        if temp.next == nil { //这个条件就是链表的最初地位            break        }        temp = temp.next    }    //将新的节点接入到链表尾部    temp.next = newNode}//实现有序插入一个节点到链表中func InsertSort(head, newNode *Node){    temp := head    //重点:插入时必须要在temp的地位让temp.next.no和newNode.no进行比拟,不然会错过插入机会    for {        if temp.next == nil { //阐明曾经在链表的尾部了            //留神:上面两行的程序不能颠倒            newNode.next = temp.next            temp.next = newNode            break        } else if temp.next.no >= newNode.no {            newNode.next = temp.next            temp.next = newNode            break        }        temp = temp.next    }}//实现头部插入节点(队列Push的一种实现)func InsertHead(head, newNode *Node){    newNode.next = head.next    head.next = newNode}//实现一个删除链表节点的函数func Delete(head *Node, node *Node) {    temp := head    for {        if temp.next == nil { //阐明曾经在链表的尾部了,没有找到要删除的节点            break        } else if temp.next.no == node.no {            temp.next = node.next            //上面这种办法也能够,不过了解起来有点绕            //temp.next = temp.next.next            break        }        temp = temp.next    }}//实现一个头部删除链表节点的函数(队列Pop的一种实现)func DeleteHead(head *Node){    if head.next == nil{        return    }else {        head.next = head.next.next    }}//实现一个尾部删除链表节点的函数(队列Pop的一种实现)func DeleteTail(head *Node){    temp := head    for {        if temp.next == nil{ //阐明链表为空            return        }else if temp.next.next == nil{            temp.next = nil            break        }        temp = temp.next    }}//实现显示链表中所有节点信息func List(head *Node){    //前提是不能扭转头结点    temp := head    if temp.next == nil {        fmt.Println("链表为空")        return    }    for {        fmt.Printf("%d  %s -->", temp.next.no, temp.next.name) //打印下一个节点的信息        temp = temp.next        if temp.next == nil {            break        }    }}func main(){    //定义一个头结点    head := &Node{}    //定义一个节点信息    node1 := &Node{        no:   1,        name: "Number1",        next: nil,    }    node2 := &Node{        no:   2,        name: "Number2",        next: nil,    }    node3 := &Node{        no:   3,        name: "Number3",        next: nil,    }    node4 := &Node{        no:   2,        name: "Number4",        next: nil,    }    InsertTail(head, node1)    InsertTail(head, node2)    InsertSort(head, node3)    InsertSort(head, node2)    InsertSort(head, node1)    InsertSort(head, node4)    Delete(head, node4)    InsertHead(head, node1)    InsertHead(head, node2)    InsertHead(head, node3)    InsertHead(head, node4)    DeleteHead(head)    DeleteTail(head)    List(head)}