-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist_of.go
115 lines (92 loc) · 2.83 KB
/
list_of.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package gokit
import "container/list"
// ListOf 泛型链表
type ListOf[T any] struct {
list *list.List
}
// NewListOf 创建一个新的泛型链表
func NewListOf[T any]() *ListOf[T] {
return &ListOf[T]{list: list.New()}
}
// Back 返回链表的最后一个元素
func (l *ListOf[T]) Back() *ElementOf[T] {
return newElementOf[T](l.list.Back())
}
// Front 返回链表的第一个元素
func (l *ListOf[T]) Front() *ElementOf[T] {
return newElementOf[T](l.list.Front())
}
// Init 初始化链表
func (l *ListOf[T]) Init() {
l.list.Init()
}
// InsertAfter 在mark之后插入一个元素
func (l *ListOf[T]) InsertAfter(v T, mark *ElementOf[T]) *ElementOf[T] {
return newElementOf[T](l.list.InsertAfter(v, mark.element))
}
// InsertBefore 在mark之前插入一个元素
func (l *ListOf[T]) InsertBefore(v T, mark *ElementOf[T]) *ElementOf[T] {
return newElementOf[T](l.list.InsertBefore(v, mark.element))
}
// Len 返回链表的长度
func (l *ListOf[T]) Len() int {
return l.list.Len()
}
// MoveAfter 将元素e移动到mark之后
func (l *ListOf[T]) MoveAfter(e, mark *ElementOf[T]) {
l.list.MoveAfter(e.element, mark.element)
}
// MoveBefore 将元素e移动到mark之前
func (l *ListOf[T]) MoveBefore(e, mark *ElementOf[T]) {
l.list.MoveBefore(e.element, mark.element)
}
// MoveToBack 将元素e移动到链表的最后一个元素
func (l *ListOf[T]) MoveToBack(e *ElementOf[T]) {
l.list.MoveToBack(e.element)
}
// MoveToFront 将元素e移动到链表的第一个元素
func (l *ListOf[T]) MoveToFront(e *ElementOf[T]) {
l.list.MoveToFront(e.element)
}
// PushBack 将元素v插入到链表的最后一个元素
func (l *ListOf[T]) PushBack(v T) *ElementOf[T] {
return newElementOf[T](l.list.PushBack(v))
}
// PushBackList 将链表other的元素插入到链表的最后一个元素
func (l *ListOf[T]) PushBackList(other *ListOf[T]) {
l.list.PushBackList(other.list)
}
// PushFront 将元素v插入到链表的第一个元素
func (l *ListOf[T]) PushFront(v T) *ElementOf[T] {
return newElementOf[T](l.list.PushFront(v))
}
// PushFrontList 将链表other的元素插入到链表的第一个元素
func (l *ListOf[T]) PushFrontList(other *ListOf[T]) {
l.list.PushFrontList(other.list)
}
// Remove 删除元素e
func (l *ListOf[T]) Remove(e *ElementOf[T]) T {
return l.list.Remove(e.element).(T)
}
// ElementOf 泛型链表元素
type ElementOf[T any] struct {
element *list.Element
}
func newElementOf[T any](element *list.Element) *ElementOf[T] {
if element == nil {
return nil
}
return &ElementOf[T]{element: element}
}
// Next 下一个元素
func (e *ElementOf[T]) Next() *ElementOf[T] {
return newElementOf[T](e.element.Next())
}
// Prev 上一个元素
func (e *ElementOf[T]) Prev() *ElementOf[T] {
return newElementOf[T](e.element.Prev())
}
// Value 返回元素的值
func (e *ElementOf[T]) Value() T {
return e.element.Value.(T)
}