Problema:
Considerare una Single Linked List di interi. Scrivere un metodo che ritorna il valore dell’elemento distante nth dall’ultimo elemento. Se non esiste sollevare una eccezione.
Il codice della struttura dati e’ presente in un precedente post.
Input:
Un intero (nht) che rappresenta la distanza dall’ultimo elemento della lista
Output:
Un intero che rappresenta il valore dell’elemento desiderato.
Esempio:
Lista: 5, 7, 2, 4, 3, 9
Input: 0
Output: 9
Input: 1
Output: 3
Input: 5
Output: 5
Input: 6
Output: eccezione
Il mio ragionamento
Scorro la lista utilizzando due puntatori a distanza nth. Quando arrivo in fondo il primo puntatore puntera’ all’elemento desiderato (se la lista e’ sufficientemente lunga).
La mia soluzione
public int GetNthToLastElement(int nth)
{
if (nth < 0) throw new ArgumentOutOfRangeException("nth");
Node p = head;
Node q = null;
while (p != null)
{
if (nth == 0) q = (q == null) ? head : q.Next;
else --nth;
p = p.Next;
}
if (q == null) throw new ArgumentOutOfRangeException("nth");
return q.Value;
}