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 關注
- 195 瀏覽
添加回答
舉報