泛型单链表实现

72 阅读1分钟
package main

import (
"fmt"
)

// List 表示一个可以保存任何类型的值的单链表。
type List\[T any] struct {
next \*List\[T]
val  T
}

// Insert 在链表的开头插入一个新值
func (l \*List\[T]) Insert(val T) {
newNode := \&List\[T]{val: val, next: l.next}
l.next = newNode
}

// Add 在链表的末尾插入一个新值
func (l \*List\[T]) Add(val T) {
current := l
for current.next != nil {
current = current.next
}
current.next = \&List\[T]{val: val, next: nil}
}

// Delete 删除链表中第一个匹配的值
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
}
}

// Traverse 遍历链表并执行给定的操作
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) // 删除值为 2 的节点

    list.Traverse(func(val int) {
    	fmt.Println(val) // 打印链表中的每个值
    })

}