我正在尝试解决Go语言中的leetcode问题,以自学语言。我有一个链表和一个插入函数:
type ListNode struct {
Val int
Next * ListNode
}
func Insert(listNode * ListNode, i int) {
// @fixme how to check the first node?
if listNode == nil {
listNode.Val = i
listNode.Next = nil
} else {
for;;
listNode = listNode.Next {
if listNode.Next == nil {
listNode.Next = & ListNode {
i, nil
}
break
}
}
}
}
func main() {
vals: = [] int {
1, 2, 3, 4, 5
}
var list ListNode
for _,
i: = range vals {
Insert( & list, i)
}
}
问题在于,当实例化ListNode的实例时,结构字段具有零值,并且由于无法检查,因此无法更新列表的设置的第一个元素。换句话说,一个ListNode项目已初始化但为空。因此,当我想要建立清单时1->2->3->4->5
,最终会得到:0->1 ->2 ...5
。局限性是我无法更改结构定义,因为leetcode已经定义了该结构。这是上面代码的工作示例:https : //play.golang.org/p/bIz-VjY1PS7
您应该做的是不ListNode
应该使用*ListNode
,而应该使用,这样一个空列表用表示nil
*ListNode
:
func New() *ListNode {
return nil
}
func Insert(listNode *ListNode, i int) *ListNode {
// If it's nil, create it
if listNode == nil {
listNode = &ListNode{i, nil}
} else {
l := listNode
for ; l.Next != nil; l = l.Next {
}
l.Next = &ListNode{i, nil}
}
return listNode
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句