我正在尝试使用递归函数创建一个线性链表,但由于某种原因,我没有得到正确的结果。当我向列表中添加一个数字时,我注意到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
}
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报
0/150
提交
取消