尝试使用简单的 addToLast 函数(将新节点添加到链表的末尾)而不是使用内置列表来实现 LinkedList 以下是代码(删除了我用于调试的打印语句):package mainimport "fmt"var first *Linkvar last Linkfunc main() { AddToLast(10) AddToLast(20)}func AddToLast(d int) { if first == nil { last = Link{d, new(Link)} first = &last } else { last.next = &Link{d, new(Link)} last = *last.next }}type Link struct { data int next *Link}我对上面代码的理解:AddToLast 函数内部 - 在检查“first”是否为 nil 之后,即它没有任何元素,“last”被创建,数据为 10,下一个为新的空链接。现在 'first' 被分配与 'last' 相同的值,但使用内存地址(作为参考 - 我不确定我的理解在这里是否不正确)现在,当我们尝试插入 20(下一个新元素)时,将执行“AddToLast”中的 else 部分。'last.next' 被分配一个值为 20 的链接,其次为 nil。现在'last' 被移动到'last.next',以确保'last' 总是指向最后一个节点。但是,由于我将“last”移动到“last.next”,“last”('s) 内存地址发生了明显变化,这也导致 first 指向新的 last,即值为 20。为了避免这种情况,我尝试将“first”声明为 Link 而不是 *Link。但是,这样做不会使 first.next 指向新节点,即 20。我很困惑我认为哪里不正确。
1 回答
- 1 回答
- 0 关注
- 142 浏览
添加回答
举报
0/150
提交
取消