#go #linked-list #iterator
#Вперед #связанный список #итератор
Вопрос:
Итак, я пытаюсь реализовать свой собственный связанный список в Go. Я считаю, что у меня все правильно, но не могу проверить, потому что это еще не завершено. Структуры и интерфейсы были даны мне, поэтому они ДОЛЖНЫ быть правильными. Все функции — это моя работа. Буду признателен за любую помощь в отношении функций Next и begin. похоже, я не могу вернуть *it в следующей функции.
пакет main
import (
"fmt"
)
type Vector struct {
num [] interface{}
size int
}
type VectorIterator struct {
x Vector
i int
}
type List struct {
l *ListIterator
}
type ListIterator struct {
num interface{}
next *ListIterator
}
type Container interface {
begin() Iterator
append (v interface{})
}
type Iterator interface {
next() Iterator
isEnd() bool
Deref () interface {}
}
func (it *ListIterator) isEnd() bool {
if it.next == nil {
return true
} else {
return false
}
}
func (it *VectorIterator) isEnd() bool {
если it.Next() == nil {
возвращает true
} else {
возвращает false
}
}
func (it *ListIterator) Deref() interface {} {
return it.num
}
func (it *ListIterator) append(v interface{}) {
for {
it.Next()
if it.isEnd() == true {
break
}
}
it.Next()
it.num = v
}
func (it *ListIterator) begin() Iterator {
}
func (it *ListIterator) Next() Iterator {
if it.isEnd() == false {
it = it.next
}
return *it
}
Комментарии:
1. Опишите, что вы ожидаете сделать дальше, и вернитесь. Например, является ли назначение функции переходом к следующему элементу списка и возвращает true, если есть следующий элемент? Кроме того, опишите цель begin .
2. «Я считаю, что у меня все правильно, но не могу проверить, потому что оно еще не завершено» вам не нужно ждать, пока оно будет завершено, чтобы проверить ваш код. Вы никогда не пожалеете о времени, потраченном на добавление тестов в свой код, и лучшее время для их добавления — это время написания кода, а не после go.dev/doc/tutorial/add-a-test
3. Да, цель функции — перейти к следующему элементу списка, и мой профессор был крайне расплывчатым в том, что делает begin. Они просто сказали, что нам нужно добавить итератор begin() в контейнер. Это буквально так
4.
begin()
похоже, он должен вернуть начальный узел вашего связанного списка — a * ListIterator . В определении вашего интерфейса итератора также есть anext()
, которое вы, возможно, захотите изменитьNext()
.