571
社区成员
发帖
与我相关
我的任务
分享type ListNode struct {
prev *ListNode
next *ListNode
value string
}
type List struct {
head *ListNode
tail *ListNode
len int
}
// 创建一个节点
func NewListNode(value string) (listNode *ListNode) {
listNode = &ListNode{
value: value,
}
return
}
// 当前节点的前一个节点
func (n *ListNode) Prev() (prev *ListNode) {
prev = n.prev
return
}
// 当前节点的前一个节点
func (n *ListNode) Next() (next *ListNode) {
next = n.next
return
}
// 获取节点的值
func (n *ListNode) GetValue() (value string) {
if n == nil {
return
}
value = n.value
return
}
// 创建一个空链表
func NewList() (list *List) {
list = &List{
}
return
}
// 返回链表头节点
func (l *List) Head() (head *ListNode) {
head = l.head
return
}
// 返回链表尾节点
func (l *List) Tail() (tail *ListNode) {
tail = l.tail
return
}
// 返回链表长度
func (l *List) Len() (len int) {
len = l.len
return
}
// 通过索引查找节点
func (l *List) Index(index int) (node *ListNode) {
if index < 0 {
index = (-index) - 1
node = l.tail
for true {
// 未找到
if node == nil {
return
}
if index == 0 {
return
}
node = node.prev
index--
}
} else {
node = l.head
for ; index > 0 && node != nil; index-- {
node = node.next
}
}
return
}
func (l *List) RPush(value string) {
node := NewListNode(value)
// 链表未空的时候
if l.Len() == 0 {
l.head = node
l.tail = node
} else {
tail := l.tail
tail.next = node
node.prev = tail
l.tail = node
}
l.len = l.len + 1
return
}
func (l *List) LPop() (node *ListNode) {
if l.len == 0 {
return
}
node = l.head
if node.next == nil {
l.head = nil
l.tail = nil
} else {
l.head = node.next
}
l.len = l.len - 1
return
}
LinkTable库上传至Gitee仓库:Gitee
517