Evo celog programa da ga možete pokrenit ali samo pogledajte funkciju void Delete ( struct list ** head ), označena je komentarima koda i piše šta nedostaje
#include <stdio.h>
#include <stdlib.h>
void InsertOnBegean( struct list ** );
void PrintLIst ( struct list * );
void InsertOnEnd ( struct list ** );
void Delete ( struct list ** );
struct list
{
int value;
struct list * next;
};
void PrintList(struct list * head)
{
if ( head )
{
while ( head != NULL )
{
printf ( "%d", head->value );
head = head->next;
}
}
else
{
printf ("Lista je prazna");
}
printf("\n");
}
void InsertOnBegean( struct list ** head )
{
struct list * list_ptr;
list_ptr = (struct list * ) malloc ( sizeof( struct list ) );
printf("Ucitaj element liste koji se ubacuje na pocetak:");
scanf( "%d", &list_ptr->value );
if ( *head == NULL )
{
*head = list_ptr;
(*head)->next = NULL;
}
else
{
list_ptr->next = *head;
*head = list_ptr;
}
}
void InsertOnEnd ( struct list ** head )
{
struct list * list_ptr, *act;
list_ptr = (struct list * ) malloc ( sizeof( struct list ) );
printf("Ucitaj element liste koji se ubacuje na kraj:");
scanf( "%d", &list_ptr->value );
if ( *head == NULL )
{
(*head) = list_ptr;
(*head)->next = NULL;
}
else
{
act = *head;
while ( act->next != NULL )
act = act->next;
act->next = list_ptr;
list_ptr->next = NULL;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Delete ( struct list ** head )//funkcija Delete prihvaća adresu pointera head koji je početak liste//////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int data;/////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct list * act, * ptr;/////////////////////////////////////////////////////////////////////////////////////////////
act = *head;//act je head, glava liste////////////////////////////////////////////////////////////////////////////////
printf ( "Unesite trazeni element\n" );///////////////////////////////////////////////////////////////////////////////
scanf ( "%d", &data );//unosimo traženi element///////////////////////////////////////////////////////////////////////
if ( act )//ako act = *head nije NULL dakle lista ima elemenata///////////////////////////////////////////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ( act->value == data )//ako je act->value jednak data ( traženom elementu ) element se nalazi na prvom mestu///
{
//kako da izbrišen prvi element?
}
else//Nije prvi? Idemo u while petlju/////////////////////////////////////////////////////////////////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
while ( act->value != data )// dok se ne dođe do trženog elementa/////////////////////////////////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////////
ptr = act;//ovo će biti prethodni jer act sigurno nije traženi, nebismo ušli u petlju/////////////////////
act = act->next;//act postaje sledeći element/////////////////////////////////////////////////////////////
if ( act == NULL )//ako je act jednak NULL došli sno do kraja liste i nismo ništa našli///////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////
printf ( "element nije pronadjen\n" );////////////////////////////////////////////////////////////////
break;////////////////////////////////////////////////////////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ( act != NULL )//izašli smo iz petlje i nismo došli do kraja dakle našli smo ga////////////////////////////
{/////////////////////////////////////////////////////////////////////////////////////////////////////////////
ptr->next = act->next;//povezujem prethodni sa sledećim act ispada////////////////////////////////////////
printf ( "element %d, nadjen i izbrisan\n", act->value );/////////////////////////////////////////////////
free ( act );//oslobađamo memoriju////////////////////////////////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
else//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
printf ( "LISTA je prazna\n" );// act = *head je NULL lista je prazna/////////////////////////////////////////////
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
struct list * head = NULL;
int ch = 1;
while ( ch != 0 )
{
printf ( "1 - insert on begean\n2 - insert on end\n3 -delete\n4 - list\n0 - end\n" );
scanf( "%d", &ch );
switch ( ch )
{
case 1:
InsertOnBegean ( &head );
break;
case 2:
InsertOnEnd ( &head );
break;
case 3:
Delete ( &head );
break;
case 4:
PrintList ( head );
break;
default :
break;
}
}
}











nešto sasvim jednostavno i kratko, liste