Länkad lista i C med singel pekare (Hur kan de funka?)

Permalänk
Medlem

Länkad lista i C med singel pekare (Hur kan de funka?)

Jag har gjort en länkad lista med dubblepekare, så tänkte jag testa och göra en med en singelpekare - och det fungerar typ lika bra. Min osäkerhet ligger i varför det fungerar. Här är min funktion + main.

Hur kan det här fungera när jag enbart tar emot listan i första anropet? Med en enkelpekare så får väl *current bara en kopia av head, eller? Och den nya noden läggs då till på currents kopia (dvs det ändras enbart lokalt). Men även om jag skippar att ta emot push i andra anropet så fungerar det? Jag trodde att jag alltid var tvungen att köra headRef = push(headRef,5); t.ex

node* push(node* head, int data){ node *current = head; node* newNode = createNode(data); if(head == NULL){ head = newNode; }else{ while(current->next != NULL){ current = current->next; } current->next = newNode; } return head; } int main(){ int listSize; node* headRef=NULL; headRef = push(headRef,5); push(headRef,4); push(headRef,3); push(headRef,2); printList(headRef); }

Visa signatur

10700K | NVIDIA RTX 3080

Permalänk
Medlem

* funktionen push returnerar en pekare till head/första noden. Antingen den du passade in som första argument eller om den var null så returneras pekaren till noden om precis skapades.
* Om listan inte var tom(dvs head var inte null) så körs det en while loop som går genom listan ifrån head till sista noden och lägger till den nya noden sist i listan.

Om du lägger till headRef = på alla andra anrop eller ej påverkar inte funktionaliteten då det är samma pekare som returneras var gång.

När du passar en pekare "by value" dvs utan referens så skapas det en kopia av pekaren, men det som den pekar på är samma adress. Dvs det är en kopia av pekaren, men den nya pekaren pekar på samma nod i listan.