這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package main//鏈表實現import ( "fmt" "os")//定義錯誤常量const ( ERROR = -1000000001)//定義元素類型type Element int64//定義節點type LinkNode struct { Data Element //資料域 Nest *LinkNode //指標域,指向下一個節點}//函數介面type LinkNoder interface { Add(head *LinkNode, new *LinkNode) //後面添加 Delete(head *LinkNode, index int) //刪除指定index位置元素 Insert(head *LinkNode, index int, data Element) //在指定index位置插入元素 GetLength(head *LinkNode) int //擷取長度 Search(head *LinkNode, data Element) //查詢元素的位置 GetData(head *LinkNode, index int) Element //擷取指定index位置的元素}//添加 頭結點,資料func Add(head *LinkNode, data Element) { point := head //臨時指標 for point.Nest != nil { point = point.Nest //移位 } var node LinkNode //新節點 point.Nest = &node //賦值 node.Data = data head.Data = Element(GetLength(head)) //列印全部的資料 if GetLength(head) > 1 { Traverse(head) }}//刪除 頭結點 index 位置func Delete(head *LinkNode, index int) Element { //判斷index合法性 if index < 0 || index > GetLength(head) { fmt.Println("please check index") return ERROR } else { point := head for i := 0; i < index-1; i++ { point = point.Nest //移位 } point.Nest = point.Nest.Nest //賦值 data := point.Nest.Data return data }}//插入 頭結點 index位置 data元素func Insert(head *LinkNode, index int, data Element) { //檢驗index合法性 if index < 0 || index > GetLength(head) { fmt.Println("please check index") } else { point := head for i := 0; i < index-1; i++ { point = point.Nest //移位 } var node LinkNode //新節點,賦值 node.Data = data node.Nest = point.Nest point.Nest = &node }}//擷取長度 頭結點func GetLength(head *LinkNode) int { point := head var length int for point.Nest != nil { length++ point = point.Nest } return length}//搜尋 頭結點 data元素func Search(head *LinkNode, data Element) { point := head index := 0 for point.Nest != nil { if point.Data == data { fmt.Println(data, "exist at", index, "th") break } else { index++ point = point.Nest if index > GetLength(head)-1 { fmt.Println(data, "not exist at") break } continue } }}//擷取data 頭結點 index位置func GetData(head *LinkNode, index int) Element { point := head if index < 0 || index > GetLength(head) { fmt.Println("please check index") return ERROR } else { for i := 0; i < index; i++ { point = point.Nest } return point.Data }}//遍曆 頭結點func Traverse(head *LinkNode) { point := head.Nest for point.Nest != nil { fmt.Println(point.Data) point = point.Nest } fmt.Println("Traverse OK!")}//主函數測試func main() { var head LinkNode = LinkNode{Data: 0, Nest: nil} head.Data = 0 var nodeArray []Element for i := 0; i < 10; i++ { nodeArray = append(nodeArray, Element(i+1+i*100)) Add(&head, nodeArray[i]) } Delete(&head, 3) Search(&head, 2032) Insert(&head, 23, 10010) Traverse(&head) fmt.Println("data is", GetData(&head, 6)) fmt.Println("length:", GetLength(&head)) os.Exit(0)}