Code:
link *printList(link *current);
link *populateList(link *current);
Both functions don't return a link pointer.

Code:
link *searchList(int value, link *head) {
      struct node *temp;
      temp = head;
      while(head) {
             if(value == head->data) {
                  return head;
         }
         head = head->next;
      }
      head = temp;
      free(temp);
      return head;
}
You destroy your list if the value isn't found.
Why do you think you need to free "temp"?

I've also noticed that you don't store data in the first node (the struct "head" points to). Why?

Bye, Andreas