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