It looks like you are trying to present the list as a header object (start), followed by the actual elements of the list. This is a good idea because it simplifies dealing with an empty list, but you do not have the correct implementation.
When you add, you need to remove the special case code that you have to run last_entry. The start node will never contain character data.
When searching, you must make sure that you miss the head (beginning), since it does not contain character data. The second mistake in your search code is that you stop searching when p-> next is NULL (this means you can never return the final element in your list.) You must stop when p is NULL.
Of course, you should not use a linked list at all: a hash table would be a better choice, since it had better performance and memory efficiency.
user97370
source share