4 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
像這樣測(cè)試值接收者的地址來查看它是否為 nil 是沒有意義的:
for &l != nil {
這里,l是一個(gè)有值的變量,它永遠(yuǎn)不能為零。
如果你有一個(gè)指針接收器,這將做到這一點(diǎn),并且即使在lnil 時(shí)也能工作:
func (l *ListNode) display() {
for trc:=l; trc!=nil; trc=trc.Next {
fmt.Printf("%v ->", trc.Val)
}
}
如果你得到一個(gè)值接收者:
func (l ListNode) display() {
for trc:=&l; trc!=nil; trc=trc.Next {
fmt.Printf("%v ->", trc.Val)
}
}

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
以下是指針取消引用:
v = *ptr
如果 ptr 為零,這將崩潰。在取消引用之前檢查是否為零。
if ptr != nil {
v = *ptr
// ......
}

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
您擁有值接收器的事實(shí)不會(huì)改變您擁有指針字段的事實(shí)。并且您不需要將它們的形式強(qiáng)制為接收者的形式(值/指針)。他們可以保留指針。無需(顯式)取消引用。
func (l ListNode) display() {
curNode := &l
for curNode != nil {
fmt.Printf("%v ->", curNode.Val)
curNode = curNode.Next
}
fmt.Println()
}

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
某種遞歸解決方案
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 關(guān)注
- 218 瀏覽
添加回答
舉報(bào)