Повторение: Конструктор связного списка
Часть раздела Объектно-ориентированное программирование путешествия по GO на Coddy — урок 24 из 107.
Задание
ЛегкоДавайте создадим связный список с нуля! Вы создадите структуру данных, где каждый узел указывает на следующий, образуя цепочку связанных значений в памяти.
Вы организуете свой код в двух файлах:
linkedlist.go: Определите структуруNodeс полямиValue(int) иNext(*Node). Создайте структуруLinkedList, которая содержит указатель на узелHead. Реализуйте следующие методы для*LinkedList:Append— добавляет новый узел с заданным значением в конец спискаPrepend— добавляет новый узел с заданным значением в начало спискаPrint— обходит список и выводит все значения, разделенные->, заканчиваяnil
main.go: Считайте значения из входных данных, постройте связный список, добавляя узлы в конец и в начало, а затем выведите итоговую структуру списка.
Будут предоставлены следующие входные данные:
- Строка 1: Первое значение для добавления в конец (append)
- Строка 2: Второе значение для добавления в конец (append)
- Строка 3: Значение для добавления в начало (prepend)
Ваш метод Print должен выводить список в следующем формате:
[value1] -> [value2] -> [value3] -> nilНапример, для входных данных 10, 20 и 5 ваш вывод должен быть:
5 -> 10 -> 20 -> nilМетод Append должен пройти до конца списка (где Next равен nil), прежде чем добавить новый узел. Метод Prepend должен создать новый узел, направить его Next на текущую голову (head), а затем обновить голову на новый узел. Помните, что у пустого списка голова равна nil, поэтому обработайте этот случай в методе Append.
Попробуйте сами
package main
import "fmt"
func main() {
// Чтение входных значений
var val1, val2, val3 int
fmt.Scanln(&val1)
fmt.Scanln(&val2)
fmt.Scanln(&val3)
// Создание нового связанного списка
list := &LinkedList{}
// TODO: Используйте Append, чтобы добавить val1 и val2 в список
// TODO: Используйте Prepend, чтобы добавить val3 в начало списка
// TODO: Выведите итоговую структуру списка
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП в Go
Внешние файлыРабочее пространство и модули GoПакеты и импортыЭкспортируемые и неэкспортируемые именаВведение в ООП в GoСтруктуры как классыОпределение методов структурПолучатели-указатели и получатели-значенияИнициализация структурФункции-конструкторыИтоги — Простой калькулятор4Интерфейсы
Введение в интерфейсыНеявная реализацияИнтерфейс как контрактПустой интерфейс (any)Утверждение типаПереключатель типовКомпозиция интерфейсовИнтерфейсы Stringer и ErrorПовторение: Калькулятор фигур7Инкапсуляция
Экспортируемые и неэкспортируемые поляИнкапсуляция на уровне пакетовГеттеры и сеттерыСокрытие информации в GoИтоги — Записи о студентах10Обобщения (Generics) (Go 1.18+)
Введение в GenericsПараметры типовОграничения типовОбобщенные структурыОбходной путь для обобщенных методовИтоги — Обобщенная коллекция13Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн Abstract FactoryПаттерн ObserverПаттерн Strategy2Глубокое погружение в типы и структуры
Базовые и составные типыОпределение пользовательских типовТеги структурАнонимные структурыВложенные структурыНулевые значения и значения по умолчаниюПовторение — Контактная книга5Композиция вместо наследования
Почему в Go нет наследованияОсновы встраивания структурПродвижение методовВстраивание нескольких структурВстраивание против агрегацииЗатенение встроенных методовИтоги — Иерархия сотрудников8Обработка ошибок и ООП
Интерфейс errorПользовательские типы ошибокОбертывание ошибок (fmt.Errorf)Sentinel-ошибкиerrors.Is() и errors.As()Panic, Defer и RecoverИтоги — Парсер файлов11Стандартная библиотека и ООП
io.Reader и io.Writersort.InterfaceИнтерфейс fmt.Stringerencoding/json со структурамиИнтерфейс http.HandlerПовторение: модели REST API14Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикMiddleware как Декоратор3Указатели и память
Основы указателей в GoУказатели на структурыПередача по значению и по ссылкеФункция new()Сборка мусора в GoПовторение: Конструктор связного списка6Полиморфизм в Go
Полиморфизм через интерфейсыУтиная типизация в GoПравила реализации интерфейсовПолиморфные коллекцииВнедрение зависимостейИтоги — Обработчик платежей9Конкурентность и ООП
Основы горутинКаналы и взаимодействиеБуферизованные и небуферизованные каналыОператор selectsync.Mutex и sync.RWMutexsync.WaitGroupПроектирование потокобезопасных структурПовторение — Worker Pool