Golang LinkedList 删除第一个元素
Golang LinkedList remove first element
我正在尝试从头开始在 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 指针?
一切都作为副本传递,因此只有传递指向它的指针才能更改某些内容,并且修改指向的值。
因此,如果不 return 新的列表头(您必须在调用者处分配),您就无法做您想做的事。
另一种方法是传递头指针的地址(**LinkedList
类型),这很丑陋(必须始终传递头指针的地址)。您还可以添加一个单独的方法来删除第一个元素,例如 RemoveFirst()
,因此您只需传递给此方法即可。这个 RemoveFirst()
也可以 return 新的头,调用者必须分配它。 RemoveFirst()
也可以是“常规”函数而不是方法。
另一种方法是为列表创建一个包装器,它包含一个指向头部的指针。你在包装器上实现方法,而不是在节点类型上。并且包装器的方法可以更改保存头指针的字段。
查看相关:
我正在尝试从头开始在 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 指针?
一切都作为副本传递,因此只有传递指向它的指针才能更改某些内容,并且修改指向的值。
因此,如果不 return 新的列表头(您必须在调用者处分配),您就无法做您想做的事。
另一种方法是传递头指针的地址(**LinkedList
类型),这很丑陋(必须始终传递头指针的地址)。您还可以添加一个单独的方法来删除第一个元素,例如 RemoveFirst()
,因此您只需传递给此方法即可。这个 RemoveFirst()
也可以 return 新的头,调用者必须分配它。 RemoveFirst()
也可以是“常规”函数而不是方法。
另一种方法是为列表创建一个包装器,它包含一个指向头部的指针。你在包装器上实现方法,而不是在节点类型上。并且包装器的方法可以更改保存头指针的字段。
查看相关: