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 }