___ ___ erkimt How can I reverse a simple linked list without using a previous pointer ______ qstntxt ___

I have to solve a data structure fiction problem that involves reversing a linked list, but how can I invert a list if I do not have the elements of it (Less of course p-start and p-> end) follows the code

%pre%     
______ azszpr206421 ___

The first function reverses the list elements and the second function reverses the start and end reference.

%pre%     
___

1

I have to solve a data structure fiction problem that involves reversing a linked list, but how can I invert a list if I do not have the elements of it (Less of course p-start and p-> end) follows the code

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct TipoElemento {
    int valor;
    struct TipoElemento *proximo;
}TElemento;


typedef struct TipoLista {
    TElemento *inicio;
    TElemento *fim;
}TLista;

void inicializar (TLista *p){
    p->inicio = NULL;
    p->fim = NULL;
}

void inserir (TLista *p){
    TElemento *novo;
    novo = new TElemento;
    printf("Entre com um novo elemento ");
    scanf("%d",&novo->valor);
    novo->proximo = NULL;

    if (p->inicio == NULL){
        p->inicio = novo;
        p->fim = novo;
    }else{
        p->fim->proximo = novo;
        p->fim = novo;

    }

}

void apresentar (TLista *p){
    TElemento *aux = p->inicio;          // ao criar a variavel aux devemos inicializar com o primeiro elemento da LISTA // P->INICIO

    if(p->inicio == NULL){
        printf("Lista vazia ");
    }else{
        while(aux != NULL){  // eu quero APRESENTAR MINHA LISTA ----AUX
            printf("%d",aux->valor);
            aux = aux->proximo;
        }
    }
}

void inverter (TLista *p){
    TLista *aux = p->fim;

    where (){
        aux = 
    }

}

int main (){
    TLista aep;
    TLista aep2;
    int opcao;

    inicializar(&aep);
    inicializar (&aep2);
    do 
    {
        printf("\n ****** ESTRUTURAS DE DADOS - PILHA ESTATICA ******\n");
        printf("\nOpcoes: \n\n");
        printf(" 1 - Inserir novo elemento \n");
    //  printf(" 2 - Consultar elemento \n");
    //  printf(" 3 - Remover elemento \n");
        printf(" 4 - Apresentar todos os elementos \n");
    //  printf(" 0 - para sair \n\n");
    //  printf("Entre com a sua opcao: ");
        scanf("%d", &opcao); /* Le a opcao do usuario */
        switch (opcao)
        {
            case 1: inserir(&aep); break;
            //case 2: consultar(&E); break;
        //  case 3: retirarPilha(&P); break;
            case 4: apresentar(&aep); break;
            case 0: break;
            default: printf("\n\n Opcao invalida"); getch(); break;
        }
    } while (opcao != 0);
}
    
asked by anonymous 22.05.2017 / 00:42

1 answer

2

The first function reverses the list elements and the second function reverses the start and end reference.

void inverteElementos (TElemento *e, TElemento *ant){
    if(e->proximo!=NULL)
        inverteElementos(e->proximo, e);
    e->proximo = ant;
}

void inverter (TLista *p){
    inverteElementos(p->inicio, NULL);

    //Inverte inicio com fim
    TElemento *aux = p->inicio;
    p->inicio = p->fim;
    p->fim = aux;
}
    
22.05.2017 / 03:53