Возникли проблемы с реализацией функций begin() и next() для моего связанного списка Go. Первый раз использую Go

#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 . В определении вашего интерфейса итератора также есть a next() , которое вы, возможно, захотите изменить Next() .