1.链表
1.1常见的链表
1.1.1单向链表
单向链表每个数据节点包含数据和后继节点的指针,最后一个节点的后继节点指针为NULL

1.1.2单向循环链表
单向循环链表和单向链表相似,每个数据节点包含数据和后继节点的指针,区别在于最后一个节点的后继节点指针为链表的头部节点,形成一个环。

1.1.2双向链表
双向链表的每个数据节点包含三个元素:数据、前驱节点的指针、后继节点的指针。头部节点的前驱指针为NULL, 尾部节点的后继指针为NULL

2.双向链表
2.1 双向链表节点示意图

2.2 双向链表实现
2.2.1 数据结构
var (
ERROR_OUT_OF_RANGE = errors.New("index out of range!")
)
type linkedNode struct {
data interface{}
prev *linkedNode
next *linkedNode
}
type LinkedList struct {
size int
head *linkedNode
tail *linkedNode
mutex *sync.Mutex
}
func NewLinkedList() *LinkedList {
return &LinkedList{
size: 0,
head: nil,
tail: nil,
mutex: &sync.Mutex{},