Per ottenere un po 'di pratica in C, sto scrivendo alcune funzioni di base per operare su un elenco collegato di int. Ho iniziato con funzioni che accettavano come "elenco" un puntatore al nodo principale. Ora, mi trovo a correre in sempre più occasioni in cui ho sia bisogno di limitare le specifiche della funzione più di quanto vorrei, o ho bisogno di usare un puntatore a un puntatore al nodo principale per consentire l'alterazione / rimozione del nodo principale in un modo coerente con il modo in cui modifico / rimuovo altri nodi.
È preferibile che tutte le funzioni accettino una "lista" nella stessa forma, come un puntatore a un puntatore, piuttosto che accettare un puntatore al nodo? O forse dovrei cambiare il modo in cui penso a modificare / rimuovere il nodo principale per evitare di dover cambiare il puntatore?
Ad esempio, se scrivo una funzione remove che rimuove tutte le istanze del dato int, e il valore del nodo head è quello int, vedo alcune scelte ovvie:
-
Posso passare un puntatore a un puntatore e spostare il puntatore testa sul nodo successivo non rimosso.
-
Posso passare un puntatore e posso spostare il valore del nodo successivo non rimosso, ad esempio nodo x, nel nodo principale e rimuovere il nodo x insieme ad altri nodi che contengono il valore da rimuovere . Questo fallisce nel caso in cui l'elenco sia costituito da un solo nodo che contiene il valore, quindi devo limitare le specifiche per escludere questo caso.
Nel caso in cui passassi un puntatore a un puntatore per questa funzione, dovrei cambiare tutte le altre funzioni per accettare un puntatore a un puntatore?
Ci sono degli standard per cose come questa o spetta a me? (Fingendo ovviamente che questo codice sia importante in qualche modo per qualcuno diverso da me e che, in quella terra fantastica, possa essere usato da altre persone senza conoscere il funzionamento interno delle funzioni, al di là delle loro firme.)