微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Golang 中查找双链表的最大值和最小值

如何解决在 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
}

The Go Playground for list

对于循环链表(环)的实现如下。我使用了 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
}

The Go Playground for ring

,

这是我为获取 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 举报,一经查实,本站将立刻删除。