[C con Clase] duda con lista en C

Armando B. VERA abvera en arnet.com.ar
Lun Feb 2 01:55:24 CET 2009




SOBRE ESTRUCTURAS DINÁMICAS DE DATOS "EDD"

Parte del siguiente codigo lo extraje del material EDD
de www.conclase.net

----------------------------------------------------------
typedef struct _nodo {
   int valor;
   struct _nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;


/* Funciones con listas: */
void Insertar(Lista *l, int v);
/* ¿aquí "Lista *l" es lo mismo que "tipoNodo **l" ? */


void Insertar(Lista *lista, int v)
{
   pNodo nuevo, anterior;
   /* Crear un nodo nuevo */
   nuevo = (pNodo)malloc(sizeof(tipoNodo));
   nuevo->valor = v;
   /* Si la lista está vacía */
   if(ListaVacia(*lista) || (*lista)->valor > v) {
      /* Añadimos la lista a continuación del nuevo nodo */
      nuevo->siguiente = *lista;
      /* Ahora, el comienzo de nuestra lista es en nuevo nodo */
      *lista = nuevo;
   }
   else {
      /* Buscar el nodo de valor menor a v */
      anterior = *lista;

	/* la pregunta es porque entonces aquí la asignación  "anterior =*lista"
	no sería posible ya que una es "tipoNodo *anterior" y la otra es
	"tipoNodo **lista"
	*/

      /* Avanzamos hasta el último elemento o hasta que el
         siguiente tenga un valor mayor que v */
      while(anterior->siguiente && anterior->siguiente->valor <=
v)
         anterior = anterior->siguiente;
      /* Insertamos el nuevo nodo después del nodo anterior */
      nuevo->siguiente = anterior->siguiente;
      anterior->siguiente = nuevo;
   }
}
--------------------------------------------------------------------
Estoy tratando de hacer algo parecido y no encuentro el error.
Este es mi codigo
--------------------------------------------------------------------
/* ************************** palabra.c ******************************* */
/*	La idea es que cada letra sea un nodo y se pueda escribir cadenas (palabras) de forma dinámica, sin saber la longitud de la misma. */
#include <stdio.h>
#include <stdlib.h>
typedef struct letra{
	char letra;
	struct letra *sigLetra;
} tipoLetra;
typedef tipoLetra *pLetra; 
typedef tipoLetra *palabra; 
void insertarLetra(palabra *p, char l);
int main() {
	char c;
	palabra pal=NULL;
	while((c=getchar())!='\n' || c!='\0')  {
		insertarLetra(&pal,c);
	}
	while(pal) {
		printf("%d",pal->letra);
		pal=pal->sigLetra;
	}
}
void insertarLetra(palabra *pal, char l){
	pLetra nueva; 
	pLetra anterior;
	anterior=*pal; //aquí es la duda
	nueva=(pLetra)malloc(sizeof(tipoLetra));
	nueva->letra=l;
	while(anterior->sigLetra!=NULL) {
		anterior=anterior->sigLetra;
	}
	anterior->sigLetra=nueva;
}
-- 
Armando B. VERA
abvera en arnet.com.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090201/96653f94/attachment.html>


Más información sobre la lista de distribución Cconclase