为了账号安全,请及时绑定邮箱和手机立即绑定

链表实现的指针问题

链表实现的指针问题

Go
临摹微笑 2021-10-04 16:38:04
尝试使用简单的 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
提交
取消
意见反馈 帮助中心 APP下载
官方微信