##### 定义一个结构体
``` go
type Student struct {
Name string
Age int
Score float32
next *Student
}
```
##### 定义一个打印链表的函数,如下:
``` go
func trans(p *Student){
for p != nil {
fmt.Println(*p)
p = p.next
}
}
```
我打算在链表头部插入新的结构体,
``` go
//头部插入
func inertHead(head *Student){
for i := 0; i < 10; i++ {
stu := Student{
Name: "stu" + strconv.Itoa(i),
Age: rand.Intn(100),
Score: rand.Float32() * 100,
}
stu.next = head
head = &stu
}
}
```
最后在入口函数`main`中调用这些函数
```go
func main(){
var head *Student = &Student{} //分配指针内存
head.Name = "Tom"
head.Age = 18
head.Score = 80
// 插入新的结构体
insertHead(head)
// 打印新的链表
trans(head)
}
```
我传入的已经是指针了,应该是引用类型传递了吧?本以为会打印11个结构体组成的链表,但是结果只打印了`{Tom,18,80,nil}`
大神们,这个该怎么改呢?其中的原理又是什么?
更多评论
func insertHead(head **Student){
for i := 0; i < 10; i++ {
stu := Student{
Name: "stu" + strconv.Itoa(i),
Age: rand.Intn(100),
Score: rand.Float32() * 100,
}
stu.next = *head
*head = &stu
}
}
https://play.golang.com/p/NroD32JgWVp
#1