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