package main
import (
"fmt"
)
type List\[T any] struct {
next \*List\[T]
val T
}
func (l \*List\[T]) Insert(val T) {
newNode := \&List\[T]{val: val, next: l.next}
l.next = newNode
}
func (l \*List\[T]) Add(val T) {
current := l
for current.next != nil {
current = current.next
}
current.next = \&List\[T]{val: val, next: nil}
}
func (l \*List\[T]) Delete(val T) {
current := l
for current.next != nil {
if current.next != nil && fmt.Sprintf("%v", current.next.val) == fmt.Sprintf("%v", val) {
current.next = current.next.next
return
}
current = current.next
}
}
func (l \*List\[T]) Traverse(action func(T)) {
current := l.next
for current != nil {
action(current.val)
current = current.next
}
}
func main() {
list := \&List\[int]{}
list.Insert(1)
list.Insert(2)
list.Insert(3)
list.Traverse(func(val int) {
fmt.Println(val)
})
list.Delete(2)
list.Traverse(func(val int) {
fmt.Println(val)
})
}