<div dir="ltr">Hola Matías,<div><br></div><div>No funciona correctamente, pero puede funcionar correctamente. La lógica es incorrecta, por lo que deberías modificar la lista enlazada, antes de liberar un nodo.</div><div><br></div><div>En tu caso, necesitas el puntero 'next' del nodo anterior al igual que el siguiente nodo de este nodo que quieres eliminar. Esto significa que necesitas dos punteros: uno para vincular el nodo al siguiente y otro para eliminar su memoria. Como hay un caso particular para eliminar el primer nodo, se suele comprobar aparte del caso general; esto es,</div><div><br></div><div>// Caso particular:  eliminar la cabeza</div><div><div>if( (*pstart)->number == num )<br>{</div><div>  free( *pstart );</div><div>  *pstart = NULL;</div><div>  return;</div><div>}</div></div><div><br></div><div>// Caso general:  eliminar otros nodos<br>for(  ; (*pstart)->next ; pstart = &(*pstart)->next )</div><div><div>{</div><div>  if( (*pstart)->next->number == num )</div><div>  {</div><div>    LIST *ptr = (*pstart)->next->next;<br></div><div>    free( (*pstart)->next );</div><div>    *pstart = ptr;</div><div>    return;</div><div>  }</div><div>}</div></div><div><br></div><div>En la función, 'add()', no necesitas el primer bucle 'while'.</div><div><div><br></div></div><div>En la función, 'print()', no necesitas aceptar un doble puntero; un puntero singular es suficiente.</div><div><br></div><div><br></div><div>Espero que esto te aclare las dudas.</div><div><br></div><div>Steven</div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">2017-12-27 14:53 GMT-05:00 Matias M. <span dir="ltr"><<a href="mailto:section1.op@gmail.com" target="_blank">section1.op@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Buenas lista...tanto tiempo..<br>
<br>
Es algo rápido que no estoy dando con la solución..<br>
supongo que soy YO el que esta mal..<br>
<br>
tengo este código de listas linkeadas que hice para probar(hice un<br>
pastebin colorido)<br>
<a href="http://dpaste.com/059KFXV" rel="noreferrer" target="_blank">http://dpaste.com/059KFXV</a><br>
<br>
que básicamente agrega números a una lista y los borra<br>
usando punteros...<br>
en la parte de eliminar tengo el codigo asi:<br>
<br>
        while (*pstart) {<br>
                if ((*pstart)->number == num ) {<br>
                        free(*pstart);<br>
                        *pstart = (*pstart)->next;<br>
                        return;<br>
                }<br>
                pstart = &(*pstart)->next;<br>
        }<br>
<br>
si el numero es el que yo busco/paso<br>
hace un free primero<br>
y después usa el mismo "puntero a puntero"(pstart)<br>
para apuntar al próximo ...<br>
<br>
esto funciona y no entiendo porque..si antes hice un free.<br>
no se de donde saca la info para el próximo:<br>
(*pstart)->next;<br>
<br>
no se si me explico bien pero cualquier cosa me preguntan.<br>
Saludos<br>
Matias.<br>
<br>
PD: Buenas fiestas para todos/as.<br>
<br>
______________________________<wbr>_________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" rel="noreferrer" target="_blank">http://listas.conclase.net/<wbr>mailman/listinfo/cconclase_<wbr>listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" rel="noreferrer" target="_blank">http://listas.conclase.net/<wbr>index.php?gid=2&mnu=FAQ</a><br>
</blockquote></div><br></div></div>