mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-18 08:32:40 +08:00
RemoveAt
This commit is contained in:
@ -14,6 +14,7 @@ type LinkedNode[T any] struct {
|
|||||||
Prev, Next *LinkedNode[T]
|
Prev, Next *LinkedNode[T]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewLinkedList 初始化链表
|
||||||
func NewLinkedList[T any](elems ...T) *LinkedList[T] {
|
func NewLinkedList[T any](elems ...T) *LinkedList[T] {
|
||||||
l :=
|
l :=
|
||||||
&LinkedList[T]{
|
&LinkedList[T]{
|
||||||
@ -99,6 +100,9 @@ func (l *LinkedList[T]) Remove(n *LinkedNode[T]) {
|
|||||||
l.front = n.Next
|
l.front = n.Next
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n.Next = nil
|
||||||
|
n.Prev = nil
|
||||||
|
|
||||||
l.size--
|
l.size--
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,24 +111,22 @@ func (l *LinkedList[T]) RemoveAt(index int) {
|
|||||||
defer l.locker.Unlock()
|
defer l.locker.Unlock()
|
||||||
|
|
||||||
var i int
|
var i int
|
||||||
var prev *LinkedNode[T]
|
for current := l.front; current != nil; current = current.Next {
|
||||||
|
|
||||||
prev = l.front
|
|
||||||
for current := l.front; current != nil; {
|
|
||||||
|
|
||||||
if i == index {
|
if i == index {
|
||||||
prev.Next = current.Next
|
|
||||||
|
// 重连接
|
||||||
|
current.Prev.Next = current.Next
|
||||||
|
current.Next.Prev = current.Prev
|
||||||
|
|
||||||
|
current.Prev = nil
|
||||||
current.Next = nil
|
current.Next = nil
|
||||||
|
|
||||||
l.size--
|
l.size--
|
||||||
return
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
prev = current
|
|
||||||
current = current.Next
|
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *LinkedList[T]) pushBackNode(n *LinkedNode[T]) {
|
func (l *LinkedList[T]) pushBackNode(n *LinkedNode[T]) {
|
||||||
|
@ -87,12 +87,17 @@ func BenchmarkLinkedList(b *testing.B) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRemoveNode(t *testing.T) {
|
func TestRemoveNode(t *testing.T) {
|
||||||
l := list.NewLinkedList(1, 2, 4)
|
l := list.NewLinkedList(1, 2, 3, 4, 5)
|
||||||
|
|
||||||
l.ForEach(func(i int) bool {
|
// l.ForEach(func(i int) bool {
|
||||||
t.Log(i)
|
// t.Log(i)
|
||||||
|
|
||||||
return false
|
// return false
|
||||||
})
|
// })
|
||||||
|
|
||||||
|
l.RemoveAt(1)
|
||||||
|
for currnet := l.FrontNode(); currnet != nil; currnet = currnet.Next {
|
||||||
|
t.Logf("%p %+v", currnet, currnet)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user