Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα. Φτιάχνω μια κλάση συνδεδεμένη λίστα και χρειάζομαι μια μέθοδο που να τοποθετεί νέα στοιχεία ενα ενα σε αύξουσα σειρά. Να μην χρειαστεί δηλαδη στο τέλος ταξινόμηση να είναι ήδη ταξινομημένος. Η μέθοδος κρασάρει και δεν μπορώ να καταλάβω γιατί ίσως φταίει και η ώρα αν μπορεί κάποιος να βοηθήσει και να μου πει αν είναι σωστή η υλοποίηση: 

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();
	        }
	}
}

Δημοσ.

δεν εχεις προσεξει καποιες Ν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();
	        }
	}
}

Δημοσ.

@georgemarios Ευχαριστώ πολύ για τις διευκρινήσεις.. Έχεις δίκιο μου ξέφυγαν αρκετά!! 


@παπι τι μήνυμα εννοείς? Απλά μου βγάζει το κλασικό "has stop working" των windows.. Έχει κάτι άλλο που δεν ξέρω??

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...