gpt4 book ai didi

pointers - 传递给nil的方法时,Golang指针未更新

转载 作者:行者123 更新时间:2023-12-01 20:26:24 25 4
gpt4 key购买 nike

我正在尝试与递归函数一起创建线性链接列表,但是由于某种原因,我没有得到正确的结果。

当我在列表中添加数字时,我注意到L.head方法返回后,recursiveAdd从未更新。鉴于它是指针,是否应该更新它?
list.Display()之后的预期结果:
1个
2
3

实际结果:空字符串

package main

import "fmt"

type Node struct {
num int
next *Node
}

type List struct {
head *Node
}

func (L *List) Add(n int) {
L.recursiveAdd(L.head, n)
}

func recursiveAdd(node *Node, n int){
if node == nil {
node = &Node{n, nil}
return
}
L.recursiveAdd(node.next, n)
}

func (L *List) Display() {
recursiveDisplay(L.head)
}

func recursiveDisplay(n *Node){
if n == nil {
return
}
fmt.Println(n.num)
recursiveDisplay(n.next)
}

func main(){
list := List{}

list.Add(1)
list.Add(2)
list.Add(3)

list.Display()
}

最佳答案

List.Add不会更新L.head。您将L.head传递给recursiveAdd,但是传递的是L.head的副本,该副本为nil,当您为其分配值时,您只会更新堆栈上的指针的副本,而不是L.head。你可以做:

func (L *List) Add(n int) {
l.head=L.recursiveAdd(L.head, n)
}

func (L *list) recursiveAdd(node *Node, n int) *Node{
if node == nil {
node = &Node{n, nil}
return node
}
node.next=L.recursiveAdd(node.next,n)
return node
}

关于pointers - 传递给nil的方法时,Golang指针未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62009740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com