diff --git a/lib_lista_complementar.c b/lib_lista_complementar.c
index e846740023c29bc7f5777ae59a2db9b2c5f7503c..a0e66dcc6b390bb10ae3f8549dc314861abaa0d9 100644
--- a/lib_lista_complementar.c
+++ b/lib_lista_complementar.c
@@ -76,33 +76,33 @@ int intercala_listas(t_lista *l, t_lista *m, t_lista *i)
 	if (!inicializa_lista (i))
 		return 0;
 
-	int item;
-	while (!lista_vazia(l) || !lista_vazia(m))
+	if (!inicializa_atual_inicio(l))
+		return 0;
+	if (!inicializa_atual_inicio(m))
+		return 0;
+	
+	int item1, item2;
+
+	while (consulta_item_atual(&item1, l) && consulta_item_atual(&item2, m))
 	{
-		consulta_item_atual(&item, l);
-		incrementa_atual(l);
-		insere_inicio_lista(item, i);
+		insere_fim_lista(item1, i);
+		insere_fim_lista(item2, i);
 
-		consulta_item_atual(&item, m);
+		incrementa_atual(l);
 		incrementa_atual(m);
-		insere_inicio_lista(item, i);
 	}
 
-	if (lista_vazia(l))
-		while (!lista_vazia(m))
-		{
-			consulta_item_atual(&item, m);
-			incrementa_atual(m);
-			insere_inicio_lista(item, i);
-		}
-
-	else
-		while (!lista_vazia(l))
-		{
-			consulta_item_atual(&item, l);
-			incrementa_atual(l);
-			insere_inicio_lista(item, i);
-		}
+	while (consulta_item_atual(&item1, l))
+	{
+		insere_fim_lista(item1, i);
+		incrementa_atual(l);
+	}
+
+	while (consulta_item_atual(&item2, m))
+	{
+		insere_fim_lista(item2, i);
+		incrementa_atual(m);
+	}
 
 	return 1;
 }
diff --git a/main.c b/main.c
index fde3c7d9f5faa5752e8ecbcfc470ddad25296a1c..f1c7bda89772509c25d26b29372fe1ad32aa841e 100644
--- a/main.c
+++ b/main.c
@@ -10,7 +10,7 @@ int main()
 	inicializa_lista(&u);
 	inicializa_lista(&w);
 
-	printf("insere inicio e fim:\n");
+	printf("insere inicio e fim em l:\n");
 	insere_inicio_lista(10,&l);
 	insere_inicio_lista(20,&l);
 	insere_inicio_lista(5,&l);
@@ -21,13 +21,16 @@ int main()
 	imprime_lista(&l);
 	printf("\n\n");
 
-	printf("copia:\n");
+	printf("copia l em u e w:\n");
 	copia_lista(&l, &u);
 	printf ("lista u: ");
 	imprime_lista(&u);
+	copia_lista(&l, &w);
+	printf ("\nlista w: ");
+	imprime_lista(&w);
 	printf("\n\n");
 
-	printf("concatena:\n");
+	printf("concatena u em l:\n");
 	concatena_listas(&l, &u);
 	printf ("lista l: ");
 	imprime_lista(&l);
@@ -36,16 +39,23 @@ int main()
 	imprime_lista(&u);
 	printf("\n\n");
 
-	printf("ordena:\n");
+	printf("ordena l:\n");
 	ordena_lista(&l);
 	printf ("lista l: ");
 	imprime_lista(&l);
-	printf("\n");
+	printf("\n\n");
 
-	printf("intercala:\n");
-	intercala_listas(&l, &l, &w);
-	printf ("lista w: ");
+	destroi_lista(&u);
+	printf("destruindo u\n\n");
+
+	printf("intercala l com w em u:\n");
+	printf("lista l: ");
+	imprime_lista(&l);
+	printf("\nlista w: ");
 	imprime_lista(&w);
+	intercala_listas(&l, &w, &u);
+	printf ("\nlista u: ");
+	imprime_lista(&u);
 	printf("\n");
 
 	destroi_lista(&l);