Wheel, meet your new inventor. Fire, meet your new discoverer.
I know you've probably had this annoying little problem foisted on you by a lecturer that thinks you have to learn how to program C++ from first principles. However you're using strings so why not go the whole hog and use a list from the standard library?
Once you've defined your books then creating a list is pretty simple:
std::list<book> my_books;
There you go, all the farting about with nodes disposed of [1]. Next up is how you read your books from a file and write them to it. Reading and writing is just copying so why not use the copy algorithm from the standard library?
To write them:
std::copy( my_books.begin(),
my_books.end(),
std::ostream_iterator<book>( file_stream ) );
To read them:
std::copy( std::istream_iterator<book>( file_stream ),
std::istream_iterator<book>(),
std::back_inserter( my_books ) );
Now there's a snake in the grass here... Yep, you have to write some code. What you have to do is implement insertion and extraction operators (<< and >>) for your structure, Book. Then you all that code will work like a dream. Or a nightmare :-). And you'll have the bonus of being able to read and write Books from the console with no code changes.
One final thing - if you can get a better C++ teacher go and get one. Implementing your own lists is so last century and anyone that's making you write your own is a sadist.
Cheers,
Ash
[1] You can now make the joke:
Coder: "My code has no nodes"
Reviewer: "How does it smell?"
Coder: "Terrible!"
If you're not a native English speaker and miss the joke, don't worry, it ain't that funny unless you've heard the original and even then it's a bit poor.