gpt4 book ai didi

go - 插入一个简单的单链表

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:08 25 4
gpt4 key购买 nike

我正在尝试解决 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
}

关于go - 插入一个简单的单链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48695146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com