为了账号安全,请及时绑定邮箱和手机立即绑定

以 nil 形式传递给方法时,Golang 指针未更新

以 nil 形式传递给方法时,Golang 指针未更新

Go
犯罪嫌疑人X 2022-06-06 15:43:25
我正在尝试使用递归函数创建一个线性链表,但由于某种原因,我没有得到正确的结果。当我向列表中添加一个数字时,我注意到L.head该方法返回后从未更新过recursiveAdd。鉴于它是一个指针,不应该更新它吗?之后的预期结果list.Display():1 2 3实际结果:空字符串package mainimport "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()}
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

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

}


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信