go - 为什么此链表未添加新节点?

标签 go linked-list

我要制作一个单链列表,并将每个数据插入头部。我编写了以下代码,但是我不知道为什么它会给我错误的结果。

type ListNode struct {
    val  interface{}
    Next *ListNode
}

func New(n int) *ListNode {
    node := &ListNode{val: n}
    return node
}

func (head *ListNode) Print() {
    for head != nil {
        fmt.Println(head.val)
        head = head.Next
    }
}

func (head *ListNode) AddToFirst(n int) {
    newHead := &ListNode{val: n}
    newHead.Next = head
    head = newHead
}


这是我的测试数据
node := New(4)
node.AddToFirst(5)
node.AddToFirst(8)
node.AddToFirst(10)
node.Print()

当我的输入是

4, 5, 8, 10



我想要输出

10, 8, 5, 4



希望您能帮助我解释为什么会这样。我不明白为什么?
我使用指针来添加值,并且不使用引用类型。

最佳答案

您应该首先定义一个Node结构类型,然后定义一个ListNode结构类型...
就像是 :

type Node struct {
   val int
   next *Node
}

type ListNode struct {
   head *Node
}

然后,您的AddToFirst很明显:
func (list *ListNode) AddToFirst(n int) {
   list.head = &Node{val: n, next: list.head}
}

当心您的Print()函数:它不应修改列表,而只能对其进行迭代。

关于go - 为什么此链表未添加新节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60834061/

相关文章:

editor - SciTE 中的多行 command.go

json - 在 Go 中解码时类型检查 json 值

go - 查询参数 - 在 golang 中用空白替换 +

c - 如何将结构存储为链表节点,并且该结构具有 char *words[10] 这是一个已解析的字符串?

go - $GOPATH/go.mod 存在但不应该在 AWS Elastic Beanstalk 中

regex - golang 正则表达式提取数量对及其单位

c - 如何在C中将链表中的字符复制到数组中?

c - C 中的映射数组 - 带键 : Value 的链表

c++ - 从文件中读取,存储到链表中,然后再次打印到文件中

创建链表来实现队列