Δημοσιεύτηκε: 28 Ιαν 2012, 18:18
stamatiou έγραψε:
με το new->next = (*list) θέτουμε ότι το επόμενο του new είναι το list σωστά;
με το (*list) = new δεν βάζουμε το list να δείχνει στο new;
Ουσιαστικά βάζουμε το επόμενο του new να είναι το ίδιο του new;
Είναι συχνή απορία αυτό! Για να το ξεδιαλύνεις, φαντάσου τους δείκτες σαν σκέτα βέλη που δείχνουν σε κουτιά που περιέχουν δεδομένα μέσα τους.
Οπότε αν έχουμε π.χ. την παρακάτω λίστα ...
- Κώδικας: Επιλογή όλων
*list -> [ data1 | next ] -> [ data2 | next ] -> NULL
και δημιουργήσουμε κάπου στη μνήμη ένα ξέμπαρκο, νέο κουτί με τον δείκτη new να δείχνει σε αυτό ( μέσω του malloc/calloc γίνεται αυτό) ...
- Κώδικας: Επιλογή όλων
*list -> [ data1 | next ] -> [ data2 | next ] -> NULL
new -> [ data3 | next ]
τότε με το: new->next = (*list); παίρνουμε αυτό το σχήμα:
- Κώδικας: Επιλογή όλων
*list
|
v
new -> [ data3 | next ] -> [ data1 | next ] -> [ data2 | next ] -> NULL
και με το: (*list) = new; παίρνουμε το εξής σχήμα:
- Κώδικας: Επιλογή όλων
*list
|
v
new -> [ data3 | next ] -> [ data1 | next ] -> [ data2 | next ] -> NULL
το οποίο είναι ακριβώς αυτό που θέλαμε να κάνουμε, να προσθέσουμε δηλαδή το new στην αρχή της λίστας μας. Ο δείκτης new από εδώ και πέρα μας είναι εν πολλοίς άχρηστος, γιατί έχουμε τον *list
έγραψε:BTW: Καλό τριήμερο σε όσους ισχύει
Επίσης