package main import ( "container/list" "fmt" ) func printList(l *list.List) { for temp := l.Front(); temp != nil; temp = temp.Next() { fmt.Printf("%v ", temp.Value) } } func main() { // foo1() foo2() /* mylist := list.New() mylist.PushBack(0) mylist.PushBack(1) mylist.PushBack(2) mylist.PushBack(3) // Получаем указатель на элемент который добавили (*Element) elem3 := mylist.PushBack(4) printList(mylist) // удаляем элемент '3' по указателю (*Element) mylist.Remove(elem3) // так же можем воспользоваться методом Front()/Back() чтобы // получить первый/последний элемент mylist.Remove(mylist.Front()) fmt.Printf("\nПосле удаления\n") printList(mylist) // mylist.PushFront(1) // mylist.PushFront(2) // mylist.PushFront(3) */ } func foo1() { // Создаем контейнер list и добавляем в него элементы mylist := list.New() mylist.PushBack(2) mylist.PushBack(5) mylist.PushBack(3) mylist.PushBack(11) mylist.PushBack(12) // Проходимся по элементам и удаляем те, которые меньше 10 for e := mylist.Front(); e != nil; { // Запоминаем следующий элемент перед удалением текущего next := e.Next() if e.Value.(int) < 10 { // Удалялем текущий элемент из списка mylist.Remove(e) } e = next // Переходим к следующему элементу } // Выводим список после удаления элементов for e := mylist.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } } // --------------------------------------------------------------- func foo2() { queue := list.New() Push(1, queue) Push(2, queue) Push(3, queue) printQueue(queue) Pop(queue) printQueue(queue) // fmt.Println(Pop(queue)) // printQueue(queue) } // Добавление элементов в очередь func Push(elem interface{}, queue *list.List) { queue.PushBack(elem) } // Удуление элемента и его возврат func Pop(queue *list.List) interface{} { if queue.Front() != nil { return nil } return queue.Remove(queue.Front()) } // Печать очереди в одну строку без пробелов func printQueue(queue *list.List) { for temp := queue.Front(); temp != nil; temp = temp.Next() { fmt.Print(temp.Value) } }