InstruçÔes
Implement Linked List Operations
Neste laboratĂłrio, vocĂȘ irĂĄ implementar operaçÔes adicionais para uma estrutura de dados de lista ligada, construindo sobre a funcionalidade bĂĄsica de adicionar e remover nĂłs.
Objetivo: Cumprir as user stories abaixo e fazer com que todos os testes passem para completar o laboratĂłrio.
User Stories:
1. VocĂȘ deve ter uma função
contains que aceita uma lista ligada e um elemento. Ela deve retornar true se o elemento especificado existir na lista ligada e false caso contrĂĄrio.
1. VocĂȘ deve ter uma getAt função que aceita uma lista ligada e um Ăndice. Ela deve retornar o elemento no Ăndice dado na lista ligada. Se o Ăndice estiver fora dos limites, deve retornar undefined.
1. VocĂȘ deve ter uma função insertAt que aceita uma lista ligada, um Ăndice e um elemento. Ela deve inserir o elemento dado na posição especificada na lista ligada. Se o Ăndice estiver fora dos limites, ela nĂŁo deve modificar a lista.
1. VocĂȘ deve ter uma removeAt função que aceita uma lista ligada e um Ăndice. Ela deve remover o nĂł no Ăndice fornecido na lista ligada. Se o Ăndice estiver fora dos limites, nĂŁo deve modificar a lista.
1. VocĂȘ deve ter uma função clear que aceita uma lista ligada. Ela deve remover todos os elementos da lista ligada, efetivamente redefinindo-a para um estado vazio.
Nota: Alguns testes posteriores dependem de métodos anteriores. Por exemplo, se getAt não for implementado corretamente, os testes para funçÔes como insertAt e removeAt podem falhar mesmo quando essas funçÔes estiverem quase corretas.
O que fazer:
Testes:
- `initList` deve retornar um objeto com `head` definido como `null` e `length` definido como `0`.
- `add` deve aumentar o comprimento da lista em um.
- `remove` deve diminuir o comprimento da lista em um.
- VocĂȘ deve ter uma `contains` function.
- `contains` deve retornar `true` se o elemento existir na lista.
- `contains` deve retornar `false` se o elemento nĂŁo existir na lista.
- `contains` deve retornar `false` para uma lista vazia.
- VocĂȘ deve ter uma `getAt` função.
- `getAt` deve retornar o elemento em um dado Ăndice.
- `getAt` deve retornar `undefined` para Ăndices invĂĄlidos.
- `getAt` deve retornar `undefined` para uma lista vazia.
- VocĂȘ deve ter uma `insertAt` função.
- `insertAt` deve inserir um elemento no inĂcio da lista.
- `insertAt` deve inserir um elemento no meio da lista.
- `insertAt` deve inserir um elemento no final da lista.
- `insertAt` deve inserir em uma lista vazia no Ăndice `0`.
- `insertAt` nĂŁo deve modificar a lista para Ăndices invĂĄlidos.
- VocĂȘ deve ter uma `removeAt` função.
- `removeAt` deve remover o elemento em um Ăndice especificado.
- `removeAt` deve remover o primeiro elemento corretamente.
- `removeAt` deve remover o Ășltimo elemento corretamente.
- `removeAt` deve redefinir a lista ao remover o Ășnico elemento.
- `removeAt` nĂŁo deve modificar a lista para Ăndices invĂĄlidos.
- VocĂȘ deve ter uma `clear` função.
- `clear` deve remover todos os elementos da lista.
- `clear` deve permitir que a lista seja reutilizada.
Console