3 回答

TA貢獻1775條經驗 獲得超8個贊
像這樣測試值接收器的地址以查看它是否為 nil 是沒有意義的:
for &l != nil {
這里,l是一個有值的變量,它永遠不能為零。
如果你得到一個指針接收器,這會做到,并且即使l是 nil 也能工作:
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貢獻1813條經驗 獲得超2個贊
你有一個值接收器的事實并沒有改變你有指針字段的事實。而且您不需要將他們的形式強制為接收者的形式(值/指針)。它們可以保持指針。無需取消引用(明確地)。
func (l ListNode) display() {
curNode := &l
for curNode != nil {
fmt.Printf("%v ->", curNode.Val)
curNode = curNode.Next
}
fmt.Println()
}

TA貢獻1846條經驗 獲得超7個贊
某種遞歸解決方案
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()
}
- 3 回答
- 0 關注
- 151 瀏覽
添加回答
舉報