Menu
CoddyTech

Middle of the Linked List

Você recebe uma lista simplesmente encadeada armazenada em dois arrays de mesmo tamanho. O nó i contém o valor values[i] e aponta para o nó next[i]; -1 encerra a lista, e a cabeça é o nó 0. Os nós não estão armazenados na ordem da lista, então siga os ponteiros.

Retorne o valor do nó do meio. Quando a lista tem um número par de nós, há dois nós do meio; retorne o valor do segundo.

Função

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
o valor armazenado por cada nó
nextinteger-array
o índice do nó ao qual cada nó se conecta, ou -1 para o último nó
Retornainteger
o valor do nó do meio, o segundo nó do meio quando o comprimento é par

Restrições

  • 1 ≤ n ≤ 5000, em que n é o comprimento de values e de next.
  • -104 ≤ values[i] ≤ 104
  • Cada next[i] é -1 ou um índice de nó de 0 a n-1.
  • A partir do nó 0, a lista visita cada nó exatamente uma vez e depois chega a -1. Não há ciclo.

Exemplos

Entrada
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
Saída
5
Explicação
Seguindo os links a partir do nó 0, chegamos aos nós 0, 3, 4, 2, 1, então a lista é 4, 7, 5, 2, 9. O terceiro dos cinco é o nó 4, cujo valor é 5. A entrada do meio do próprio array, values[2] = 2, é um nó diferente.

lock icon+13 testes ocultos ao enviar

challenge icon

Para ir além

Você consegue retornar o nó que está a um terço do início da lista em uma única passagem? Com que velocidade cada ponteiro se moveria e onde você pararia?

Redefinir código
def middleNode(values, next):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

values = [4, 9, 2, 7, 5]
next = [3, -1, 1, 4, 2]

Esperado

5