Operacje na liście jednostronnie wiązanej. Usunięcie elementu za danym elementem.

0

Mam pytanie odnośnie kodu, który napisałem i zupełnie przypadkiem spełnił moje oczekiwania. Nie rozumiem jak 2 zaznaczone w kodzie linijki mogą usuwać element listy.

 
void deleteza(int x)
{
	node *pom = head;
	node *pom2 = pom -> next;
	while (pom -> next != NULL)
	{
		if (pom -> val == x)
		{
		        pom2 = pom -> next;              <------------ ta
			pom -> next = pom2 -> next;   <------------ ta
		}
		pom = pom -> next;
		pom2 = pom2 -> next;
	}
}

Od ifa mniej więcej rozumie to tak. Pom wskazuje na wartość elementu x. Następnie pom2 jest przypisany jako następny element poma, czyli pom ma wskaznik na pom2. Potem następnik poma jest równy następnikowi pom2. Dziwnie, ale działa.

0

Z pamięci go nie usuwają, jedynie przypisują wskaźnikowi pom->next wartość pom->next->next, i tyle. W sumie te 2 linijki są bezsensownie zrobione. Głębiej patrząc cała funkcja ma mały sens.

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