package main
import (
"fmt"
)
// List 表示一个可以保存任何类型的值的单链表。
type List[T any] struct {
next *List[T]
val T
}
// Add 添加一个新节点到链表的末尾
func (list *List[T]) Add(val T) {
newNode := &List[T]{val: val}
if list.next == nil {
list.next = newNode
} else {
curr := list.next
for curr.next != nil {
curr = curr.next
}
curr.next = newNode
}
}
// Delete 删除第一个匹配的节点
func (list *List[T]) Delete(val T) {
if list.next == nil {
return
}
if list.next.val == val {
list.next = list.next.next
return
}
curr := list.next
for curr.next != nil && curr.next.val != val {
curr = curr.next
}
if curr.next != nil {
curr.next = curr.next.next
}
}
// Search 查找链表中是否包含某个值
func (list *List[T]) Search(val T) bool {
curr := list.next
for curr != nil {
if curr.val == val {
return true
}
curr = curr.next
}
return false
}
// Display 显示链表中的所有值
func (list *List[T]) Display() {
curr := list.next
for curr != nil {
fmt.Printf("%v -> ", curr.val)
curr = curr.next
}
fmt.Println("nil")
}
func main() {
list := &List[int]{}
list.Add(1)
list.Add(2)
list.Add(3)
list.Display() // 输出: 1 -> 2 -> 3 -> nil
fmt.Println(list.Search(2)) // 输出: true
fmt.Println(list.Search(4)) // 输出: false
list.Delete(2)
list.Display() // 输出: 1 -> 3 -> nil
}
泛型类型代码
最新推荐文章于 2024-09-27 00:45:01 发布