4 回答
TA贡献1808条经验 获得超4个赞
像这样测试值接收者的地址来查看它是否为 nil 是没有意义的:
for &l != nil {
这里,l是一个有值的变量,它永远不能为零。
如果你有一个指针接收器,这将做到这一点,并且即使在lnil 时也能工作:
func (l *ListNode) display() {
for trc:=l; trc!=nil; trc=trc.Next {
fmt.Printf("%v ->", trc.Val)
}
}
如果你得到一个值接收者:
func (l ListNode) display() {
for trc:=&l; trc!=nil; trc=trc.Next {
fmt.Printf("%v ->", trc.Val)
}
}
TA贡献1851条经验 获得超4个赞
以下是指针取消引用:
v = *ptr
如果 ptr 为零,这将崩溃。在取消引用之前检查是否为零。
if ptr != nil {
v = *ptr
// ......
}
TA贡献1895条经验 获得超3个赞
您拥有值接收器的事实不会改变您拥有指针字段的事实。并且您不需要将它们的形式强制为接收者的形式(值/指针)。他们可以保留指针。无需(显式)取消引用。
func (l ListNode) display() {
curNode := &l
for curNode != nil {
fmt.Printf("%v ->", curNode.Val)
curNode = curNode.Next
}
fmt.Println()
}
TA贡献1830条经验 获得超9个赞
某种递归解决方案
package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func (l *ListNode) display() {
if l != nil {
fmt.Printf("%v ->", l.Val)
l.Next.display()
}
fmt.Println()
}
func main() {
num1 := &ListNode{2, &ListNode{4, &ListNode{3, nil}}}
num1.display()
}
- 4 回答
- 0 关注
- 139 浏览
添加回答
举报