#include<stdio.h>
#include<stdlib.h>
struct node
{
int val;
struct node * next;
} ;
struct node * head= NULL ,* last= NULL ;
void insert( int value)
{
struct node * tmp;
tmp= ( struct node * ) malloc ( sizeof ( node) ) ;
tmp- > val= value;
tmp- > next= NULL ;
//for the first element in the list
if ( head== NULL )
{
head= tmp;
last= tmp;
}
else
{
last- > next= tmp;
last= tmp;
}
}
int search( int value)
{
struct node* tmp= head;
while ( tmp! = NULL )
{
if ( tmp- > val== value) //if found
return 1 ;
tmp= tmp- > next;
}
return 0 ; // if not found
}
void deletenode( int value)
{
struct node* tmp= head;
struct node* prev= NULL ; //pointss the previous node
while ( tmp! = NULL )
{
if ( tmp- > val== value)
{
if ( prev== NULL ) // to delete the first node
{
head= tmp- > next;
}
else
prev- > next= tmp- > next;
break ;
}
prev= tmp;
tmp= tmp- > next;
}
}
void printlist( )
{
struct node * tmp= head;
while ( tmp! = NULL )
{
printf ( "%d\n " ,tmp- > val) ;
tmp= tmp- > next;
}
}
int main( )
{
int num;
//Insert value in the list
while ( true )
{
printf ( "Enter value(-1 to exit): " ) ;
scanf ( "%d" ,& num) ;
if ( num< 0 ) break ;
insert( num) ;
}
//List printing
printf ( "\n Here goes the list:\n " ) ;
printlist( ) ;
//search a value in the list
if ( search( 10 ) == 1 )
printf ( "yes, the number is in the list\n " ) ;
else
printf ( "no, the number is not in the list\n " ) ;
//Deleting a node from the list
deletenode( 20 ) ;
printf ( "\n Now the list is\n " ) ;
printlist( ) ;
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgpzdHJ1Y3Qgbm9kZQp7CiAgICBpbnQgdmFsOwogICAgc3RydWN0IG5vZGUgKm5leHQ7Cn07CgpzdHJ1Y3Qgbm9kZSAqaGVhZD1OVUxMLCpsYXN0PU5VTEw7Cgp2b2lkIGluc2VydChpbnQgdmFsdWUpCnsKICAgIHN0cnVjdCBub2RlICp0bXA7CgogICAgdG1wPShzdHJ1Y3Qgbm9kZSAqKW1hbGxvYyhzaXplb2Yobm9kZSkpOwoKICAgIHRtcC0+dmFsPXZhbHVlOwogICAgdG1wLT5uZXh0PU5VTEw7CgogICAgLy9mb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QKICAgIGlmKGhlYWQ9PU5VTEwpCiAgICB7CiAgICAgICAgaGVhZD10bXA7CiAgICAgICAgbGFzdD10bXA7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbGFzdC0+bmV4dD10bXA7CiAgICAgICAgbGFzdD10bXA7CiAgICB9Cn0KCmludCBzZWFyY2goaW50IHZhbHVlKQp7CiAgICBzdHJ1Y3Qgbm9kZSogdG1wPWhlYWQ7CgogICAgd2hpbGUodG1wIT1OVUxMKQogICAgewogICAgICAgIGlmKHRtcC0+dmFsPT12YWx1ZSkvL2lmIGZvdW5kCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICB0bXA9dG1wLT5uZXh0OwogICAgfQoKICAgIHJldHVybiAwOyAgIC8vIGlmIG5vdCBmb3VuZAp9Cgp2b2lkIGRlbGV0ZW5vZGUoaW50IHZhbHVlKQp7CiAgICBzdHJ1Y3Qgbm9kZSogdG1wPWhlYWQ7CiAgICBzdHJ1Y3Qgbm9kZSogcHJldj1OVUxMOyAvL3BvaW50c3MgdGhlIHByZXZpb3VzIG5vZGUKCiAgICB3aGlsZSh0bXAhPU5VTEwpCiAgICB7CiAgICAgICAgaWYodG1wLT52YWw9PXZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgaWYocHJldj09TlVMTCkgIC8vIHRvIGRlbGV0ZSB0aGUgZmlyc3Qgbm9kZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBoZWFkPXRtcC0+bmV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmV2LT5uZXh0PXRtcC0+bmV4dDsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgcHJldj10bXA7CiAgICAgICAgdG1wPXRtcC0+bmV4dDsKICAgIH0KfQoKdm9pZCBwcmludGxpc3QoKQp7CiAgICBzdHJ1Y3Qgbm9kZSAqdG1wPWhlYWQ7CiAgICB3aGlsZSh0bXAhPU5VTEwpCiAgICB7CiAgICAgICAgcHJpbnRmKCIlZFxuIix0bXAtPnZhbCk7CiAgICAgICAgdG1wPXRtcC0+bmV4dDsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBpbnQgbnVtOwoKICAgIC8vSW5zZXJ0IHZhbHVlIGluIHRoZSBsaXN0CiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIHByaW50ZigiRW50ZXIgdmFsdWUoLTEgdG8gZXhpdCk6ICIpOwogICAgICAgIHNjYW5mKCIlZCIsJm51bSk7CgogICAgICAgIGlmKG51bTwwKSAgIGJyZWFrOwoKICAgICAgICBpbnNlcnQobnVtKTsKICAgIH0KCiAgICAvL0xpc3QgcHJpbnRpbmcKICAgIHByaW50ZigiXG5IZXJlIGdvZXMgdGhlIGxpc3Q6XG4iKTsKICAgIHByaW50bGlzdCgpOwoKICAgIC8vc2VhcmNoIGEgdmFsdWUgaW4gdGhlIGxpc3QKICAgIGlmKHNlYXJjaCgxMCk9PTEpCiAgICAgICAgcHJpbnRmKCJ5ZXMsIHRoZSBudW1iZXIgaXMgaW4gdGhlIGxpc3RcbiIpOwogICAgZWxzZQogICAgICAgIHByaW50Zigibm8sIHRoZSBudW1iZXIgaXMgbm90IGluIHRoZSBsaXN0XG4iKTsKCgoKICAgIC8vRGVsZXRpbmcgYSBub2RlIGZyb20gdGhlIGxpc3QKICAgIGRlbGV0ZW5vZGUoMjApOwogICAgcHJpbnRmKCJcbk5vdyB0aGUgbGlzdCBpc1xuIik7CgogICAgcHJpbnRsaXN0KCk7CiAgICByZXR1cm4gMDsKfQo=