【发布时间】:2018-10-07 17:20:51
【问题描述】:
我是 Golang 新手,对指针在这里的工作方式有点困惑,我以反向链表问题为例。
func reverseList(head *ListNode) *ListNode {
var prev *ListNode = nil
for {
if head == nil {
break
}
temp := head
head = head.Next
temp.Next = prev
prev = temp
}
return prev
}
在这种情况下,temp 和 head 指向同一个内存位置。但是如果我将temp.Next = prev 放在head = head.Next 之前,head.Next 将指向零。
当我们说temp.Next = prev 时,幕后发生了什么。我们是说temp 指向的结构现在已更改,因此如果我将该行放在head = head.Next 上方,那么head 现在也指向此更改的结构?
我想为了改变head.Next的实际值,我们必须取消引用它?
我有点困惑,为什么这行不通
func reverseList(head *ListNode) *ListNode {
var prev *ListNode = nil
for {
if head == nil {
break
}
temp := head
temp.Next = prev
prev = temp
head = head.Next <--- CHANGED ORDERING HERE
}
return prev
}
【问题讨论】:
-
与 C 不同,Go 自动取消引用指向结构的指针。如果
p是指针或如果p是结构变量,则您可以使用p.Next访问结构成员。 -
我不知道是这样的,直到现在我才真正质疑过更改结构字段!
标签: pointers go linked-list