title: Linked lists issue
body: <p>I have this code:</p>
  
  <pre><code>#include "stdlib.h"
  #include "stdio.h"
  
  typedef struct lista TLista;
  struct lista{
    char dado;
    TLista* prox;
  }lista;
  
  TLista* insere(TLista* l, char dado){
    TLista* aux;
    TLista* anterior;
    if(l == NULL){
      l = (TLista*) malloc(sizeof(TLista));
      l-&gt;dado = dado;
      l-&gt;prox = NULL;
    }else{
      aux = l;
      while(aux != NULL){
        anterior = aux;
        aux = aux-&gt;prox;
      }
      aux = (TLista*) malloc(sizeof(TLista));
      anterior-&gt;prox = aux;
      aux-&gt;dado = dado;
      aux-&gt;prox = NULL;
    }
    return l;
  }
  
  void imprime(TLista* l){
    if(l == NULL){
      printf("A lista esta vazia");
    }else{
      while(l != NULL){
      printf("%c", l-&gt;dado);
      l = l-&gt;prox;
    }
  }
  
  void concatena(TLista* lista1, TLista* lista2){
    TLista* aux = lista1;
    if(!lista1){
      lista1 = lista2;
      printf("\nInside function: ");
      imprime(lista1);
    }else{
      while(aux-&gt;prox != NULL){
        aux = aux-&gt;prox;
      }
      aux-&gt;prox = lista2;
    }
  }
  
  int main() {
    TLista* lista1 = NULL;
    TLista* lista2 = NULL;
    printf("\n");
    lista1 = insere(lista1, 't');
    lista1 = insere(lista1, 'e');
    lista1 = insere(lista1, 's');
    lista1 = insere(lista1, 't');
    lista1 = insere(lista1, 'e');
  
    imprime(lista1);
  
    printf("\n\n\n\n");
  
    lista2 = insere(lista2, 'x');
    lista2 = insere(lista2, 'u');
    lista2 = insere(lista2, 'l');
    lista2 = insere(lista2, 'a');
    lista2 = insere(lista2, 'm');
    lista2 = insere(lista2, 'b');
    lista2 = insere(lista2, 's');
  
    concatena(lista1,lista2);
    printf("\nOutside function: ");
    imprime(lista1);
    printf("\n\n");
    return 0;
  }
  </code></pre>
  
  <p>The functions names were written in Portuguese. So, the function <code>concatena</code> should merge two lists and in fact it is doing it when <code>lista1</code> is not <code>NULL</code>, but when I comment out these lines:</p>
  
  <pre><code>  lista1 = insere(lista1, 't');
    lista1 = insere(lista1, 'e');
    lista1 = insere(lista1, 's');
    lista1 = insere(lista1, 't');
    lista1 = insere(lista1, 'e');
  
    imprime(lista1);
  </code></pre>
  
  <p>the function <code>concatena</code> should receive the first list as <code>NULL</code> and the second as <code>xulambs</code>. According to it, the <code>lista1</code> should receive <code>lista2</code>'s head address, but when the function ends it execution <code>lista1</code> is empty. </p>
  
  <p>I debugged printing the values of <code>lista1</code> just after receive <code>lista2</code>'s head address and it works well, but when got to the main function, <code>lista1</code> still <code>NULL</code>. </p>
  
  <p>Can anyone help me to figure out whats going on? thanks</p>
  
  <hr>
  
  <p>A few translations:</p>
  
  <ol>
  <li>lista = list</li>
  <li>dado = data</li>
  <li>prox = next</li>
  <li>imprime = print</li>
  <li>insere = add</li>
  <li>concatena = merge</li>
  </ol>