title: Search Function in Linked List - C++
body: <p>My aim is to produce a function that searches for a number already in the list and print that it has been found.<br>
  My initial idea was to follow my remove function which searches through the list until it finds a number (to then delete).<br>
  This seemed the logical way to code the search function. If this isn't correct how would I modify it to search through my list and display that a number has been found?<br>
  I have nodes *head, *current and *temp as well as node pointer <strong>next</strong> and <strong>number</strong> as the data type in a class on a .h file.<br>
  Thank you.<br>
  <strong>NOTE</strong> - I used my remove() function under the search() function.</p>
  
  <pre><code>#include &lt;iostream&gt;                                                 
  #include &lt;string&gt;                                                   
  #include &lt;fstream&gt;                                                  
  #include "LinkedList.h"
  
  using namespace SDI;
  
  int main()
  {
      LinkedList menu;
  
      menu.insert(5);                     
      menu.insert(4);
      menu.insert(2);
      menu.insert(3);
      menu.insert(8);
      menu.remove(4);
      menu.reverse();
      menu.display();
      menu.search(2);
      system("pause");
  
  };
  
  
  LinkedList::LinkedList()            
  {
      head = NULL;
      current = NULL;
      temp = NULL;
  };
  
  
  LinkedList::~LinkedList()           
  {
  
  };
  
  
  void LinkedList::insert(int add)                                    //insert function, data is stored in add from function body
  {
      Node* newnode = new Node;                                       //definition of add node, make new node and make node* point to it
      newnode-&gt;next = NULL;                                           //point and set up to last node in the list (nothing)
      newnode-&gt;number = add;                                          //adds data to list
  
      if (head != NULL)                                               //if head is pointing to object then we have list
      {
          current = head;                                             //make current pointer point to head
          while (current-&gt;next != NULL)                               //check to see if end at list, is it the last node?
          {
              current = current-&gt;next;                                //advances current pointer to end of list
          }
          current-&gt;next = newnode;                                    //adds new node next to value already stored
      }
      else
      {
          head = newnode;                                             //if we don't have element in list
      }
  };
  
  
  void LinkedList::remove(int remove)                                 //remove function, data is stored in remove from function body
  {
      Node* remove1 = NULL;                                           //searches through for same value in remove and deletes
      temp = head;
      current = head;
      while (current != NULL &amp;&amp; current-&gt;number != remove)            //check if current node is one we want to delete...if not advance current pointer to next one
      {
          temp = current;                                             //keep temp pointer one step behind
          current = current-&gt;next;                                    //advance to next node, traverse list till at the end
      }
      if (current == NULL)                                            //pass through whole list and value not found
      {
          std::cout &lt;&lt; "N/A\n";
          delete remove1;                                             //removes spare number floating around in memory
      }
      else
      {
          remove1 = current;                                          //pointing to value we want to delete
          current = current-&gt;next;                                    //advances current pointer to next node
          temp-&gt;next = current;                                       //stops hole that occurs in list, patches this up
          if (remove1 == head)                                        //if pointer is pointing to front of list
          {
              head = head-&gt;next;                                      //advance the head to next
              temp = NULL;
          }
  
          delete remove1;
      }
  };
  
  
  void LinkedList::search(int searchNum)
  {
      Node* searchnumber = nullptr;
      temp = head;
      current = head;
  
      while (current != NULL &amp;&amp; current-&gt;number != searchNum)
      {
          temp = current;
          current = current-&gt;next;
      }
      if (current != NULL)
      {
          searchnumber = current;
          current = current-&gt;next;
          std::cout &lt;&lt; "-" &lt;&lt; searchnumber &lt;&lt; " Found";
      }
      else
      {
          std::cout &lt;&lt; "N/A";
      }
  };
  
  
  void LinkedList::display()
  {
      current = head;                                                 //point to start of list
  
      while (current != NULL)                                         //while it points to something in list
      {
          std::cout &lt;&lt; current-&gt;number;                               //display list starting from start
          current = current-&gt;next;                                    //advance to next pointer
      }
  };
  
  
  void LinkedList::reverse()
  {
      Node *new_head = nullptr;                                       //create new head as we want it to start from last element
  
      for (current = head; current;)                                  //same as display, ask it to go through list from head then outside loop assign to new head and switch sides
      {
          temp = current;                                             //keep temp pointer one step behind
          current = current-&gt;next;                                    //goes through each element in the list
          temp-&gt;next = new_head;                                      //scrolls through backwards from new head
          new_head = temp;                                            
      }
  
      head = new_head;                                                //assign head to new head
  };
  </code></pre>