以下代码将帮助您找到答案。我使用 Go container/list 包的(双)列表到 findMinAndMax 操作。
package main
import (
"container/list"
"fmt"
)
func main() {
var a = [5]int{11, -4, 7, 8, -10}
//declare a double list
i := list.New()
// push a's values to list
for _, valueA := range a {
i.PushFront(valueA)
}
min, max := findMinAndMax(i)
fmt.Println("Min: ", min) //Output: Min: -10
fmt.Println("Max: ", max) //Output: Max: 11
}
func findMinAndMax(a *list.List) (min int, max int) {
min = a.Front().Value.(int)
max = a.Front().Value.(int)
for e := a.Front(); e != nil; e = e.Next() {
value := e.Value.(int)
if value < min {
min = value
}
if value > max {
max = value
}
}
return min, max
}
The Go Playground for list
对于循环链表(环)的实现如下。我使用 Go container/ring 包的 Ring 来实现。
package main
import (
"container/ring"
"fmt"
)
func main() {
var a = [5]int{11, -4, 7, 8, -10}
//declare a container ring
r := ring.New(len(a))
// push a's values to ring
for _, valueA := range a {
r.Value = valueA
r = r.Next()
}
min, max := findMinAndMax(r)
fmt.Println("Min: ", min) //Output: Min: -10
fmt.Println("Max: ", max) //Output: Max: 11
}
func findMinAndMax(r *ring.Ring) (min int, max int) {
min = r.Value.(int)
max = r.Value.(int)
tmp := r
for {
value := r.Value.(int)
if value < min {
min = value
}
if value > max {
max = value
}
r = r.Next()
// r = tmp means one ring circle is completed
if r == tmp {
break
}
}
return min, max
}
The Go Playground for ring