在链表末尾插入项目



我很新,去杀虫来实现链表。这是我的源代码

package main
import "fmt"
type Node struct {
  value int
  next *Node
}
func main() {
  var head *Node
  for i := 1; i <= 10; i++ {
    insert(&head, i)
  }
  print_list(head)
}
func print_list(node_pointer *Node) {
  if (node_pointer == nil) {
    return
  } else {
    node := *node_pointer
    fmt.Printf("%dn", node.value)
    print_list(node.next)
  }
}
func insert(node_pointer **Node, // pointer to a pointer to a Node
    value int) {
  var new_node Node
  new_node.value = value
  if (*node_pointer == nil) {
    fmt.Printf("Empty listn")
    *node_pointer = &new_node
  } else {
    var cur_node Node = **node_pointer
    for cur_node.next != nil {
      cur_node = *cur_node.next
    }
    cur_node.next = &new_node
    fmt.Printf("Add %dn", (*cur_node.next).value)      }
}

输出为:

Empty list
Add 2
Add 3
Add 4
Add 5
Add 6
Add 7
Add 8
Add 9
Add 10
1

换句话说,我不能在链表的末尾插入一个新的节点。我相信这是由仅在本地进行更新cur_node.next = &new_node引起的,但不知道如何解决此问题。

问题出在您的插入函数中 - 这是一个更正的版本

func insert(node_pointer **Node, // pointer to a pointer to a Node
    value int) {
    var new_node Node
    new_node.value = value
    if *node_pointer == nil {
        fmt.Printf("Empty listn")
        *node_pointer = &new_node
    } else {
        var cur_node *Node = *node_pointer
        for cur_node.next != nil {
            cur_node = cur_node.next
        }
        cur_node.next = &new_node
        fmt.Printf("Add %dn", (*cur_node.next).value)
    }
}

操场

您的错误是因为您获得的是节点值,而不是此处的指针:

    var cur_node Node = **node_pointer

*note_pointer是指向列表头部的指针,但是你使用的是**node_pointer,然后你得到这个值,然后把这个值复制到cur_node,之后新节点会被追加到cur_node,与头节点无关。所以当你打印表单头节点时,你只能获取头节点的值。

固定解决方案就像克雷格-伍德@Nick说的那样。

相关内容

  • 没有找到相关文章

最新更新