Funkcja szukająca i kasująca z listy

0

Witam !
Napisałem dwie funkcje(jedna szuka element o podanej wartości i zwraca wskaźnik na niego, druga kasuje wskazany element):

 
node *search(node *head, int x)
{
	while(head)
	{
		if(head->value == x)
		{
			return head;
		}
		head=head->next;
	}
	return 0;
}
void remove(node *temp)
{
	node *pom;
	pom=temp->next;
	temp->next=temp->next->next;
	delete temp->next;
}

Niestety coś nie działa, a nie mam pojęcia gdzie jest błąd.
Założenie jest takie że lista musi być wieloelementowa.

1

Kasujesz następny element nie ten który znalazłeś.
remove - powinna "być przygotowana" na usunięcie pierwszego elementu.

0

nie bardzo rozumiem

1

Chodzi o to zeby znalezc element, ktory jest przed tym elementem ktorego szukasz. Dodatkowo specjalnym przypadkiem jest element pierwszy i zeby to zadzialalo to musisz przekazywac wskaznik przez referencje

0
node **search(node **head,int x)
  {
   while(*head)
     {
      if((*head)->value==x) return head;
      head=&((*head)->next);
     }
   return 0;
  }

bool remove(node **temp)
  {
   if((!temp)||(!*temp)) return false;
   node *drop=*temp;
   *temp=drop->next;
   delete drop;
   return true;
  }

// można wywołać tak:
remove(search(&head,3));

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