Uma das formas de economizar ponteiros na implementação de uma lista duplamente ligada é a utilização de dois ponteiros para nós consecutivos e guardar em cada campo de ligação a diferença entre os nós a esquerda e a direita. exemplo: typedef struct { TipoInfo info; long diff; // é importante saber que um endereço cabe em um long } No, *apontNo; ______ __________ _______ ______ | |..| | |x-pdir| | |p-y| | |..| ------ ---------- ------- ------ ^ ^ ^ ^ x p pdir y Conhecendo p e pdir podemos ir tanto par a esquerda: pesq = (apontNo) ((long) p->diff + pdir); como para a direita: pdirdir = (apontNo) ((long) p - pdir->diff); A vantagem da economia de um ponteiro por nó implica na desvantagem da necessidade de percorrer a lista com três ponteiros.