Go語言(Golang)雙鏈表
阿新 • • 發佈:2018-12-06
package main import ( "fmt" ) //雙鏈表結構 type TwoLinkTable struct { no int name string pre *TwoLinkTable next *TwoLinkTable } //直接在隊尾插入 func InsertNode(head *TwoLinkTable, newNode *TwoLinkTable) { temp := head for { if temp.next == nil { break } temp = temp.next } temp.next = newNode newNode.pre = temp } //按編號no從小到大順序插入 func InsertNode2(head *TwoLinkTable, newNode *TwoLinkTable) { temp := head for { if temp.next == nil { break }else if temp.next.no >= newNode.no { break } temp = temp.next } newNode.next = temp.next newNode.pre = temp if temp.next != nil { temp.next.pre = newNode } temp.next = newNode } //按no編號刪除 func DelNode(head *TwoLinkTable, id int) { temp := head if temp.next == nil { fmt.Println("該佇列為空!") return } for { if temp.next == nil { break } else if temp.next.no == id { if temp.next.next != nil { temp.next.next.pre = temp } temp.next = temp.next.next return } temp = temp.next } fmt.Println("未找到該編號的物件") } //正序顯示 func ListNodeASC(head *TwoLinkTable) { temp := head if temp.next == nil { fmt.Println("該佇列為空!") return } for { if temp.next == nil { break } fmt.Printf("%d:%s\t",temp.next.no,temp.next.name) temp = temp.next } } //倒序顯示 func ListNodeDESC(head *TwoLinkTable) { temp := head if temp.next == nil { fmt.Println("該佇列為空!") return } for { if temp.next == nil { break } temp = temp.next } for { fmt.Printf("%d:%s\t",temp.no,temp.name) temp = temp.pre if temp.pre == nil { break } } } func main() { head := &TwoLinkTable{} newNode1 := &TwoLinkTable { no : 1, name : "a", } newNode2 := &TwoLinkTable { no : 2, name : "b", } newNode3 := &TwoLinkTable { no : 3, name : "c", } InsertNode2(head, newNode2) InsertNode2(head, newNode1) InsertNode2(head, newNode3) DelNode(head,3) fmt.Println("正序:") ListNodeASC(head) fmt.Println("\n逆序:") ListNodeDESC(head) }