Zwracanie wskaźnika do usuwanego elementu listy (klasy)

0

Witam,

Moim zadaniem jest stworzenie funkcji, która będzie usuwała ostatni element z listy i jednocześnie zwracała wskaźnik do jego kopii tak, by z drobnymi modyfikacjami ten element można było później wykorzystać. Na razie mam coś takiego:

Node* List::dequeue() {

	Node *tmp = this->head;

	Node* prev = NULL;

	while (tmp->getNext()) {

		prev = tmp;
		tmp = tmp->getNext();

	}

	Node* tmp2 = new Node(*prev);
	//delete prev;
	delete tmp;
	return tmp2;

}

Przyznam szczerze, że dopiero stawiam pierwsze kroki w C++, wcześniej pisałem w C i podejście strukturowe było dla mnie jasne. Tutaj jednak jest ciut trudniej. Problem polega na tym, że program się wywala - jak sądzę dlatego, że usuwam tmp, a prev jest jakoś z nim powiązane? Jak to dokładnie w ogóle wygląda? Czy jeżeli tmp jest obiektem klasy List, to co powoduje instrukcja prev = tmp?

0

Wywala się dlatego, że tak na prawdę nie usuwasz ostatniego elementu z listy. Dodatkowo nie rozpatrujesz granicznych przypadków (np. gdy list jest pusta). Powinno być:

Node* List::dequeue() {
        Node* prev = this->head;
        if(prev == NULL) {return NULL;}
        Node *tmp = prev->getNext();

        if(tmp) {
                while (tmp->getNext())) {
                        prev = tmp;
                        tmp = tmp->getNext();
 
                }
                prev->setNext(NULL);
                return tmp;
        } else {
                this->head = NULL;
                return prev;
        }
 
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1