[C++] Usuwanie w liście jednokierunkowej

0

Witam!

http://pastebin.com/kV6gSLmL - Kod całej listy.

Problem polega na tym iż w funkcji do usuwania elementów, w podanym niżej fragmencie
Nie rozumiem dlaczego gdy zrobie tmp = tmp->next to element z listy nie znika, mimo że powinien, tylko nie ten o który mi chodzi.

Natomiast w drugiej wersji : tmp->next = tmp->next->next
Element normalnie znika

Wg. mnie powinna pierwsza wersja również działać, lecz tak nie jest.

Proszę o waszę wsparcie, dlaczego tak jest, bo nie daje mi to spokoju :)

else
{
Node * Tmp = First;
while (Tmp->Next)
{
if (Tmp->key == k-1)
{

			Tmp->Next = Tmp->Next->Next; // Działa, element znika
			Tmp = Tmp->Next; // Nie działa, element nie znika
			
			
			return;
		}
		Tmp = Tmp->Next;
	}
}
0

Wstaw kod między <code><code class="cpp"></code></code>

Zacznijmy od tego, że żadna wersja nie usuwa. Bo gdzie masz delete? Ta wersja, która niby "działa", usuwa dojście do określonego elemetu, dzięki czemu potem przy wypisywaniu go nie widać, ale przez to masz wyciek pamięci.

A różnica w działaniu polega na tym, że

Tmp = Tmp->Next;

tutaj przesuwasz wskaźnik na następny element. Identyczną instrukcję masz kilka linijek niżej.

Tmp->Next = Tmp->Next->Next;

Tutaj modyfikujesz wskaźnik Next w jakimś elemencie.

0

na szybkiego:

Node *toDelete
.
.
toDelete = tmp->next; 
tmp->next = tmp->next->next;
delete(toDelete);

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