单向链表的一种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)}