title: Adding an element to the end of an ordered list
body: <p>I have just started learning about dynamic structures in C. 
  The first type that I'm trying to learn is the ordered list. I have created a few functions - namely, adding nodes to the beginning of the list and printing elements in the list, but then I decided to write a function that allows me to add elements to the end of the list. My function looks like this:</p>
  
  <pre><code>typedef struct Node* Node;
  
  void add_end(Node *head, int value) {
     Node new;
     new = malloc(sizeof(struct Node));
     new -&gt; value = value;
     new -&gt; next = NULL;
     if(*head == NULL) {
        *head = new;
     }
  
     else {
        Node help = *head;
        while(help-&gt;next != NULL) {
           help = help-&gt;next;
        }
        help-&gt;next = new;
     }
  }
  </code></pre>
  
  <p>Some clarification: My structure consists of two fields - value (int) and next (pointer to the next node). <br>
  Thus, my questions are: <br>
  1) Notice my substitution using the variable called "help" - when I tried to do this without it,namely writing  <code>*head</code> wherever <code>help</code> appears now, and this function did not work properly - it only added as much as two elements. For example, if I pushed 1, 3, 5, 7 to the list, only 5 and 7 would be added. Why was this so? I really can't see any reasonable explanation. <br><br>
  2) At first I tried passing an argument of the type <code>Node</code> to the function (Not <code>Node*</code> as I'm doing now) and the function did not put anything to the list. Once again, I can't see the difference between writing using the type Node and writing the variable without the asterisk. Could you explain it to me in layman terms? <br> <br>
  I know that my question may have a trivial answer, but please, be understanding - this is my first encounter with pointers and they may be quite complex to comprehend.</p>