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

Golang LinkedList 删除第一个元素

Golang LinkedList 删除第一个元素

C#
慕田峪9158850 2022-11-23 10:27:06

我正在尝试从头开始在 Golang 中实现 LinkedList 操作。但是我在处理删除第一个元素时发现了一个问题。我的方法是使用 OOP 样式,但似乎没有删除第一个元素。这是我写的代码


type LinkedList struct {

    Value int

    next  *LinkedList

}


func (ll *LinkedList) Remove(index int) error {

    pointer := ll

    var pointerPrev *LinkedList = nil

    current := 0


    for current < index {

        pointerPrev = pointer

        pointer = pointer.next

        current++

    }


    if pointer == ll {

        ll = ll.next // this line is problematic

        pointer = nil

    } else {

        if pointer.next == nil {

            pointerPrev.next = nil

        } else {

            pointerPrev.next = pointer.next

            pointer = nil

        }

    }


    return nil

}

有什么建议我如何实现这种删除方式而不返回新的 LinkedList 指针吗?


查看完整描述

1 回答

?
HUWWW

TA贡献1584条经验 获得超1个赞

一切都作为副本传递,因此只有传递指向它的指针才能更改某些内容,并且修改指向的值。

因此,如果不返回新的列表头(您必须在调用者处分配),您就无法做您想做的事情。

另一种方法是传递头指针的地址( 的类型**LinkedList),这很丑陋(必须始终传递头指针的地址)。您还可以添加一个单独的方法来删除第一个元素,例如RemoveFirst(),这样您只需传递给此方法即可。这RemoveFirst()也可以返回调用者必须分配的新头。这RemoveFirst()也可以是“常规”函数而不是方法。

另一种选择是为列表创建一个包装器,它包含一个指向头部的指针。你在包装器上实现方法,而不是在节点类型上。包装器的一种方法可以更改保存头指针的字段。

参见相关:Can the pointer in a struct pointer method be reassigned to another instance?


查看完整回答
反对 回复 2022-11-23
  • 1 回答
  • 0 关注
  • 8 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信