【问题标题】:Find Max and Min of Double Linked List in Golang在 Golang 中查找双链表的最大值和最小值
【发布时间】:2021-07-30 00:46:25
【问题描述】:

我需要找到一个函数,用于获取使用 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、7、9、12),我需要获取最大值和最小值

 l={2,5,7,9,12} // Created a double linked list

【问题讨论】:

    标签: list go max min doubly-linked-list


    【解决方案1】:

    以下代码将帮助您找到答案。我使用 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

    【讨论】:

    • 非常感谢 nipuna!,我有最后一个问题,我如何更改此代码以将这个最大值和最小值实现为双列表但循环?
    • 我已将环的实现添加到答案中。
    【解决方案2】:

    这是我为获取 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
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2012-09-16
      • 2017-09-19
      • 2013-11-12
      • 2017-04-20
      • 1970-01-01
      • 2015-01-16
      相关资源
      最近更新 更多