alexc Δημοσ. 14 Νοεμβρίου 2013 Δημοσ. 14 Νοεμβρίου 2013 Καλησπέρα. Φτιάχνω μια κλάση συνδεδεμένη λίστα και χρειάζομαι μια μέθοδο που να τοποθετεί νέα στοιχεία ενα ενα σε αύξουσα σειρά. Να μην χρειαστεί δηλαδη στο τέλος ταξινόμηση να είναι ήδη ταξινομημένος. Η μέθοδος κρασάρει και δεν μπορώ να καταλάβω γιατί ίσως φταίει και η ώρα αν μπορεί κάποιος να βοηθήσει και να μου πει αν είναι σωστή η υλοποίηση: void List::Insert(int data) { // Create a new node we will add Node* newNode = new Node(); newNode->SetData(data); newNode->SetNext(NULL); // Search for the right position to add the newNode Node* previous = head; Node* next = head->Next(); bool flag = false; while ( !flag ) { if ( head == NULL ){ head = newNode; flag = true; } if ( data >= previous->Data() && next == NULL ){ // In case data is the biggest value previous->SetNext(newNode); newNode->SetNext(NULL); flag = true; } if ( data >= previous->Data() && data <= next->Data()) { previous->SetNext(newNode); newNode->SetNext(next); flag = true; } else{ previous = previous->Next(); next = next->Next(); } } }
παπι Δημοσ. 14 Νοεμβρίου 2013 Δημοσ. 14 Νοεμβρίου 2013 Συνηθως κρασαρει με καποιο μνμ... anyway, δες αυτο
georgemarios Δημοσ. 14 Νοεμβρίου 2013 Δημοσ. 14 Νοεμβρίου 2013 δεν εχεις προσεξει καποιες ΝULL περιπτωσεις, δες τα σχολια Καλησπέρα. Φτιάχνω μια κλάση συνδεδεμένη λίστα και χρειάζομαι μια μέθοδο που να τοποθετεί νέα στοιχεία ενα ενα σε αύξουσα σειρά. Να μην χρειαστεί δηλαδη στο τέλος ταξινόμηση να είναι ήδη ταξινομημένος. Η μέθοδος κρασάρει και δεν μπορώ να καταλάβω γιατί ίσως φταίει και η ώρα αν μπορεί κάποιος να βοηθήσει και να μου πει αν είναι σωστή η υλοποίηση: void List::Insert(int data) { // Create a new node we will add Node* newNode = new Node(); newNode->SetData(data); newNode->SetNext(NULL); // Search for the right position to add the newNode Node* previous = head; Node* next = head->Next(); // <==== when head is null.. BOOM bool flag = false; while ( !flag ) { if ( head == NULL ){ head = newNode; flag = true; } // when previous is null.. BOOM if ( data >= previous->Data() && next == NULL ){ // In case data is the biggest value previous->SetNext(newNode); newNode->SetNext(NULL); flag = true; } if ( data >= previous->Data() && data <= next->Data()) { previous->SetNext(newNode); newNode->SetNext(next); flag = true; } else{ previous = previous->Next(); next = next->Next(); } } }
alexc Δημοσ. 14 Νοεμβρίου 2013 Μέλος Δημοσ. 14 Νοεμβρίου 2013 @georgemarios Ευχαριστώ πολύ για τις διευκρινήσεις.. Έχεις δίκιο μου ξέφυγαν αρκετά!! @παπι τι μήνυμα εννοείς? Απλά μου βγάζει το κλασικό "has stop working" των windows.. Έχει κάτι άλλο που δεν ξέρω??
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα