#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
typedef struct friend
{
char * name;
int age;
char gender;
struct friend* next;
} friend;
void node_delete( const char * name, friend* stFriend)
{
if ( ! stFriend-> next) //end of list
{
printf ( "%s is not a friend!\n " , name
) ; }
else if ( ! strcmp ( name
, stFriend
-> next
-> name
) ) //name matches! remove link {
//here's where you can free your unwanted friend ptr ~NB: are you sure this friend is not a friend of someone else?
//free(stFriend -> next);
stFriend-> next= stFriend-> next-> next;
printf ( "%s is no longer a friend!\n " , name
) ; }
else //name does not match -recurse
{
node_delete( name, stFriend-> next) ;
}
}
void print_friends( const friend* pstPerson)
{
if ( pstPerson-> next)
{
printf ( "next friend:%s\n " , pstPerson
-> next
-> name
) ; print_friends( pstPerson-> next) ;
}
else
{
printf ( "no more friends :(\n \n " ) ; }
}
int main( )
{
friend stFriend0, stFriend1, stFriend2, stPerson;
char name[ 256 ] = { 0 } ;
stFriend0.name = "amber" ;
stFriend0.next = 0 ;
stFriend1.name = "betty" ;
stFriend1.next =& stFriend0;
stFriend2.name = "catherine" ;
stFriend2.next =& stFriend1;
stPerson.name = "violet" ;
stPerson.next =& stFriend2;
printf ( "%s's friends before:\n " , stPerson.
name ) ; print_friends( & stPerson) ;
fgets ( name
, 256 , stdin
) ;
node_delete( name, & stPerson) ;
printf ( "\n \n %s's friends after:\n " , stPerson.
name ) ; print_friends( & stPerson) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiAKdHlwZWRlZiBzdHJ1Y3QgZnJpZW5kCnsKICAgIGNoYXIgKm5hbWU7CiAgICBpbnQgYWdlOwogICAgY2hhciBnZW5kZXI7CiAgICBzdHJ1Y3QgZnJpZW5kKiBuZXh0Owp9ZnJpZW5kOwoKIAp2b2lkIG5vZGVfZGVsZXRlKGNvbnN0IGNoYXIqIG5hbWUsIGZyaWVuZCogc3RGcmllbmQpCnsKICAgIGlmICghc3RGcmllbmQtPm5leHQpIC8vZW5kIG9mIGxpc3QKICAgIHsgCiAgICAgICAgcHJpbnRmKCIlcyBpcyBub3QgYSBmcmllbmQhXG4iLCBuYW1lKTsKICAgIH0KICAgIGVsc2UgaWYgKCAhc3RyY21wKG5hbWUsIHN0RnJpZW5kLT5uZXh0LT5uYW1lKSApIC8vbmFtZSBtYXRjaGVzISByZW1vdmUgbGluawogICAgeyAgICAgCiAgICAgICAgLy9oZXJlJ3Mgd2hlcmUgeW91IGNhbiBmcmVlIHlvdXIgdW53YW50ZWQgZnJpZW5kIHB0ciB+TkI6IGFyZSB5b3Ugc3VyZSB0aGlzIGZyaWVuZCBpcyBub3QgYSBmcmllbmQgb2Ygc29tZW9uZSBlbHNlPwogICAgICAgIC8vZnJlZShzdEZyaWVuZCAtPiBuZXh0KTsgICAgCiAgICAgICAgc3RGcmllbmQtPm5leHQ9c3RGcmllbmQtPm5leHQtPm5leHQ7CiAgICAgICAgcHJpbnRmKCIlcyBpcyBubyBsb25nZXIgYSBmcmllbmQhXG4iLCBuYW1lKTsgCiAgICB9CiAgICBlbHNlIC8vbmFtZSBkb2VzIG5vdCBtYXRjaCAtcmVjdXJzZQogICAgewogICAgICAgIG5vZGVfZGVsZXRlKG5hbWUsIHN0RnJpZW5kLT5uZXh0KTsKICAgIH0KfQogCiAKdm9pZCBwcmludF9mcmllbmRzKGNvbnN0IGZyaWVuZCogcHN0UGVyc29uKQp7CiAgICBpZiAocHN0UGVyc29uLT5uZXh0KQogICAgewogICAgICAgIHByaW50ZigibmV4dCBmcmllbmQ6JXNcbiIsIHBzdFBlcnNvbi0+bmV4dC0+bmFtZSk7CiAgICAgICAgcHJpbnRfZnJpZW5kcyhwc3RQZXJzb24tPm5leHQpOwogICAgfQogICAgZWxzZSAKICAgIHsKICAgICAgICBwcmludGYoIm5vIG1vcmUgZnJpZW5kcyA6KFxuXG4iKTsKICAgIH0KfQogCmludCBtYWluKCkKewogICAgZnJpZW5kIHN0RnJpZW5kMCwgc3RGcmllbmQxLCBzdEZyaWVuZDIsIHN0UGVyc29uOwogICAgY2hhciBuYW1lWzI1Nl09ezB9OwogCiAgICBzdEZyaWVuZDAubmFtZT0iYW1iZXIiOwogICAgc3RGcmllbmQwLm5leHQ9MDsKIAogICAgc3RGcmllbmQxLm5hbWU9ImJldHR5IjsKICAgIHN0RnJpZW5kMS5uZXh0PSZzdEZyaWVuZDA7CiAKICAgIHN0RnJpZW5kMi5uYW1lPSJjYXRoZXJpbmUiOwogICAgc3RGcmllbmQyLm5leHQ9JnN0RnJpZW5kMTsKIAogICAgc3RQZXJzb24ubmFtZT0idmlvbGV0IjsKICAgIHN0UGVyc29uLm5leHQ9JnN0RnJpZW5kMjsKIAogICAgcHJpbnRmKCIlcydzIGZyaWVuZHMgYmVmb3JlOlxuIiwgc3RQZXJzb24ubmFtZSk7CiAgICBwcmludF9mcmllbmRzKCZzdFBlcnNvbik7CiAKICAgIHByaW50ZigicmVtb3ZlIGEgZnJpZW5kOiAiKTsKICAgIGZnZXRzIChuYW1lLCAyNTYsIHN0ZGluKTsKICAgIHN0cnRvayhuYW1lLCAiXG4iKTsKCiAgICBub2RlX2RlbGV0ZShuYW1lLCAmc3RQZXJzb24pOwogICAgCiAgICBwcmludGYoIlxuXG4lcydzIGZyaWVuZHMgYWZ0ZXI6XG4iLCBzdFBlcnNvbi5uYW1lKTsKICAgIHByaW50X2ZyaWVuZHMoJnN0UGVyc29uKTsKIAogICAgcHJpbnRmKCJcblxuXG5kb25lIVxuIik7CiAKICAgIHJldHVybiAwOwp9Cg==