Estás trabajando en un proyecto para desarrollar un sistema de planificación de trenes para una red ferroviaria muy concurrida.
Se te ha pedido que desarrolles un prototipo para las rutas de tren del sistema de planificación. Cada ruta consta de una secuencia de estaciones de tren en las que se detiene un tren determinado.
Tu equipo ha decidido usar una lista doblemente enlazada para representar cada ruta de tren del horario. Cada estación a lo largo de la ruta del tren estará representada por un nodo de la lista enlazada.
No tienes que preocuparte por las horas de llegada ni de salida de las estaciones. Cada estación se representará simplemente con un número.
Las rutas se pueden ampliar, añadiendo estaciones al principio o al final de una ruta. También se pueden acortar eliminando estaciones del principio o del final de una ruta.
A veces se cierra una estación y, en ese caso, hay que eliminarla de la ruta, aunque no esté ni al principio ni al final de esta.
El tamaño de una ruta no se mide por la distancia que recorre el tren, sino por el número de estaciones en las que se para.
La lista enlazada es una estructura de datos fundamental en informática y se usa a menudo en la implementación de otras estructuras de datos. Como su nombre indica, es una lista de nodos enlazados entre sí. Es una lista de «nodos», en la que cada nodo se enlaza con su vecino o vecinos. En una lista simplemente enlazada, cada nodo se enlaza solo con el nodo que le sigue. En una lista doblemente enlazada, cada nodo se enlaza tanto con el nodo que viene antes como con el que viene después.
Si quieres profundizar en las listas enlazadas, echa un vistazo a este artículo, que las explica con dibujos muy claros.
Vas a escribir una implementación de una lista doblemente enlazada.
Implementa un Node que contenga un valor y punteros al nodo siguiente y al anterior.
Después, implementa una List que contenga referencias al primer y al último nodo y que ofrezca funciones para añadir y eliminar elementos.
Tu Node debe tener los siguientes campos y métodos:
Value: el valor del nodo (usaremos any).Next() *Node: puntero al nodo siguiente.Prev() *Node: puntero al nodo anterior.Debes tener una función NewList() que cree y devuelva una List:
NewList(args ...any) *List: crea una nueva lista enlazada conservando el orden de los valores.Tu List debe tener los siguientes métodos:
First() *Node: devuelve un puntero al primer nodo (cabeza).Last() *Node: devuelve un puntero al último nodo (cola).Push(v any): inserta un valor al final de la lista.Pop() (any, error): elimina un valor del final de la lista.Unshift(v any): inserta un valor al principio de la lista.Shift() (any, error): elimina un valor del principio de la lista.Reverse(): invierte la lista enlazada.Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.