如何解决在 Golang 中查找双链表的最大值和最小值
我需要找到一个函数,在该函数中我使用 Golang 获取双链表(不是数组)的最大值和最小值(使用 int 值)。我已经编写了用于获取数组值的代码,但是当我使用双链表(或循环)时,我不知道从哪里开始:
包主
导入“fmt”
func main() {
var a = [5]int{11,-4,7,8,-10}
min,max := findMinAndMax(a)
fmt.Println("Min: ",min)
fmt.Println("Max: ",max)
}
这有效,但我需要用双列表(例如称为“l”)替换数组,其中我有 5 个 int 值(2,5,9,12),我需要获得最大值和最小值
l={2,12} // Created a double linked list
解决方法
下面的代码将帮助您找到答案。我使用 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
}
对于循环链表(环)的实现如下。我使用了 Go container/ring
包的 Ring 来实现。
package main
import (
"container/ring"
"fmt"
)
func main() {
var a = [5]int{11,-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: ",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
}
,
这是我为获取 arrau 的最大值和最小值所做的代码,但我需要来自双链表的两者,希望您能理解:
func findMinAndMax(a [5]int) (min int,max int) {
min = a[0]
max = a[0]
for _,value := range a {
if value < min {
min = value
}
if value > max {
max = value
}
}
return min,max
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。