SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.4 KiB

package timemodel
import (
"container/list"
"fmt"
"testing"
)
type ListItem struct {
Val string
}
func TestList(t *testing.T) {
//创建一个实例
lst := list.New()
//尾部添加
lst.PushBack(&ListItem{"Leo"})
lst.PushBack(&ListItem{"Sarah"})
lst.PushBack(&ListItem{"Sarah"})
lst.PushBack(&ListItem{"Sarah"})
litem := lst.PushBack(&ListItem{"Sarah"})
lst.PushBack(&ListItem{"Melon"})
lst.PushBack(&ListItem{"Sarah"})
lst.PushBack(&ListItem{"Dora"})
lst.PushBack(&ListItem{"Eva"})
// 删除litem之前所有的节点
if err := RemoveListAllBeforeItem(lst, litem, false); err != nil {
t.Errorf("Failed to remove")
}
// 打印
for i := lst.Front(); i != nil; i = i.Next() {
fmt.Println(i.Value.(*ListItem).Val)
}
return
//前部添加
lst.PushFront("day")
//前部添加后,保存元素句柄
element := lst.PushFront("is ")
//在is 之后添加 mon
lst.InsertAfter("mon", element)
//在is 之前添加 Today
lst.InsertBefore("Today ", element)
//打印 輸出 Today is monday.
// i:=lst.Front() 表示初始赋值,只会在一开始执行一次,每次循环会进行一次 i != nil 语句判断,如果返回 false,表示退出循环,反之则会执行 i = i.Next()。
for i := lst.Front(); i != nil; i = i.Next() {
fmt.Print(i.Value)
}
//删除 元素
lst.Remove(element)
fmt.Println()
//打印 輸出 Today monday.
for i := lst.Front(); i != nil; i = i.Next() {
fmt.Print(i.Value)
}
fmt.Println("\nlst2输出")
var lst2 list.List
lst2.PushBack("one")
lst2.PushFront("zero ")
//打印
for i := lst2.Front(); i != nil; i = i.Next() {
fmt.Println(i.Value)
}
}
func RemoveListAllBeforeItem(lst *list.List, delNode *list.Element, delItem bool) (err error) {
var (
e, el, prev, p *list.Element
)
// 删除litem之前所有的节点
for e = lst.Front(); e != nil; e = e.Next() {
if delNode == e {
prev = e.Prev()
if delItem {
lst.Remove(e)
}
for el = prev; el != nil; el = p {
p = el.Prev()
lst.Remove(el)
}
break
}
}
return
}
func RemoveListAllAfterItem(lst *list.List, delNode *list.Element, delItem bool) (err error) {
var (
e, el, next, n *list.Element
)
// 删除litem之前所有的节点
for e = lst.Front(); e != nil; e = e.Next() {
if delNode == e {
next = e.Next()
if delItem {
lst.Remove(e)
}
for el = next; el != nil; el = n {
n = el.Next()
lst.Remove(el)
}
break
}
}
return
}