0
I need a little help here with Double Chained Circular List to solve a bigger problem.
I need to do a function that already enters my elements in descending order. My code even works with entries that only need to be reversed.Ex: 1 2 3 4 5 6, coming out 6 5 4 3 2 1. The problem is with entries of the type 6 3 9 8 ... Where do you think the problem is?
struct elemento{
  int altura;
  struct elemento *anterior;
  struct elemento *proximo;
 };
 typedef struct elemento Item;
typedef struct{
    int tamanhoLista;
    Item *primeiro;
    Item *ultimo;
}LCD_DE;
    void Inserir(LCD_DE *l){
    Item *novo = (Item*)malloc(sizeof(Item));
    scanf("%d",&novo->altura);
    if(l->tamanhoLista == 0){
        l->primeiro = novo;
        l->ultimo = novo;
        novo->anterior = novo;
        novo->proximo =  novo;
    }
    else{
        if(novo->altura >= l->primeiro->altura){  //antes do primeiro
            l->primeiro->anterior = novo;
            l->ultimo->proximo = novo;
            novo->anterior = l->ultimo;
            novo->proximo = l->primeiro;
            l->primeiro = novo;
        }
        else if(novo->altura < l->ultimo->proximo->altura){ //depois do ultimo
            l->ultimo->proximo = novo;
            l->primeiro->anterior = novo;
            novo->anterior = l->ultimo;
            novo->proximo = l->primeiro;
            l->ultimo = novo;
        }
        else{
            Item *i,*j,*k,*aux;
            for(i=l->primeiro;i!=l->primeiro;i=i->proximo){
                for(j=l->primeiro->proximo;j!=l->primeiro;j=j->proximo){
                    k=j->proximo;
                    if(novo->altura >= j->altura){
                        i->proximo = novo;
                        novo->anterior = i;
                        j->anterior = novo;
                        novo->proximo = j;
                    }
                    else if(novo->altura < j->altura){
                            j->proximo = novo;
                            novo->anterior = j;
                            k->anterior = novo;
                            novo->anterior = k;
                    }
                }
            }
        }
    }
     l->tamanhoLista++;
}
Thanks Joseph, even, the "item->Prev->next = newItem" was great, I didn’t even think about this level of pointing to solve the problem. Thank you very much :)
– Jessy