Skip to content

Commit 14d007e

Browse files
author
Dean Karn
authored
fix lsit Remove & MoveAfter|MoveBefore wiring to it (#22)
1 parent a58967f commit 14d007e

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

container/list/doubly_linked.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (d *DoublyLinkedList[V]) PushAfter(node *Node[V], v V) *Node[V] {
100100
newNode := &Node[V]{
101101
Value: v,
102102
}
103-
d.MoveAfter(node, newNode)
103+
d.moveAfter(node, newNode)
104104
return newNode
105105
}
106106

@@ -111,6 +111,10 @@ func (d *DoublyLinkedList[V]) PushAfter(node *Node[V], v V) *Node[V] {
111111
func (d *DoublyLinkedList[V]) MoveAfter(node *Node[V], moving *Node[V]) {
112112
// first detach node were moving after, in case it was already attached somewhere else in the list.
113113
d.Remove(moving)
114+
d.moveAfter(node, moving)
115+
}
116+
117+
func (d *DoublyLinkedList[V]) moveAfter(node *Node[V], moving *Node[V]) {
114118
next := node.next
115119

116120
// no next means node == d.tail
@@ -132,7 +136,7 @@ func (d *DoublyLinkedList[V]) PushBefore(node *Node[V], v V) *Node[V] {
132136
newNode := &Node[V]{
133137
Value: v,
134138
}
135-
d.MoveBefore(node, newNode)
139+
d.moveBefore(node, newNode)
136140
return newNode
137141
}
138142

@@ -143,6 +147,10 @@ func (d *DoublyLinkedList[V]) PushBefore(node *Node[V], v V) *Node[V] {
143147
func (d *DoublyLinkedList[V]) MoveBefore(node *Node[V], moving *Node[V]) {
144148
// first detach node were moving after, in case it was already attached somewhere else in the list.
145149
d.Remove(moving)
150+
d.moveBefore(node, moving)
151+
}
152+
153+
func (d *DoublyLinkedList[V]) moveBefore(node *Node[V], moving *Node[V]) {
146154
prev := node.prev
147155

148156
// no prev means node == d.head
@@ -188,12 +196,9 @@ func (d *DoublyLinkedList[V]) Back() *Node[V] {
188196
}
189197

190198
// Remove removes the provided element from the Linked List.
199+
//
200+
// The supplied node must be attached to the current list otherwise undefined behaviour could occur.
191201
func (d *DoublyLinkedList[V]) Remove(node *Node[V]) {
192-
if node.prev == nil && node.next == nil {
193-
// is a detached node, early exit
194-
return
195-
}
196-
197202
if node.prev == nil {
198203
// is head node
199204
_ = d.PopFront()

0 commit comments

Comments
 (0)