一个 Go 的指针问题求助

2019-07-24 02:07:11 +08:00
 chunwang1995

如下,当

fifo.enqueue(1) fifo.enqueue(2)

时第二个元素进不去,请高人指点

type Node struct { item Item next *Node isInit bool } type FIFON Node

func (fifo *FIFON) enqueue(item Item) { if !fifo.isInit { fifo.item = item fifo.isInit = true } else { fifoPtr := fifo.next for fifoPtr != nil { fifoPtr = fifoPtr.next } fifoPtr = &Node{ item: item, next: nil, isInit: true, } } }

2993 次点击
所在节点    Go 编程语言
4 条回复
nomoon
2019-07-24 02:31:00 +08:00
```
func (fifo *FIFON) enqueue(item int) {
if !fifo.isInit {
fifo.item = item
fifo.isInit = true
} else {
fifoPtr := fifo.next
if fifoPtr == nil {
fifo.next = &Node{item: item, next: nil, isInit: true}
} else {
for fifoPtr.next != nil {
fifoPtr = fifoPtr.next
}
fifoPtr.next = &Node{item: item, next: nil, isInit: true}
}

}
}
```
wangsongyan
2019-07-24 07:50:28 +08:00
这个代码格式真是看吐了
jingxyy
2019-07-24 09:20:48 +08:00
你的 fifoPtr 是个本地变量……而且 fifo 也不应该这样实现 你这 enqueue 是线性时间复杂度 这样没有实用价值了
zarte
2019-07-24 10:09:38 +08:00
我试了可以呀,是不是你看错了?
···golang
type Node struct {
item int
next *Node
isInit bool
}

。。。
fifo.enqueue(1)
fifo.enqueue(2)
fmt.Println(fifo.next)
return
···

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX