1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Listas Duplamente ligadas JAVA

Discussão em 'Programação' iniciada por fabio_martins, 17 de Junho de 2009. (Respostas: 5; Visualizações: 2129)

  1. tenho por exemplo Isto em JAVA
    1 - 3 - 23 - 15

    isto e um lista duplamente ligada com ponteiro para cauda (sempre que se insere um elemento insere na cauda)

    eu quero inverter a lista para ficar desta forma 15 - 23 - 3 - 1

    public void inverter(){

    No cauda = null;
    No actual = cabeca;
    No aux = null;

    while (actual != null) {
    aux = actual.prox;
    actual.prox = cauda;
    cauda = actual;
    actual = aux;
    }

    cauda = cabeca;

    }

    se depois inserir a seguinte lista (10 - 55 - 2 - 8) o resultado com este metodo ele mostra o seguinte :

    (15 - 10 - 55 - 2 - 8) , mas eu quero que fique (15 - 23 - 3 - 1 - 10 - 55 - 2 - 8).

    Alguem me poderia dar uma ajuda, é que com este metodo eu nao consigo actualizar os ponteiros

    obrigada
     
  2. xuxaki

    xuxaki Power Member

    tens de ter outro método que adicione os novos elementos à lista, se não a cada lista inserida vai substituir a anterior.
     
  3. blueomega

    blueomega Power Member

    Podes fazer um metodo com um ciclo que corre da cauda para a cabeça e mete os valores numa nova lista, retornando a mesma no fim

    em todo caso Collections de java tem reverse
     
  4. Mas existe alguma possibilidade de trocar apenas o conteúdo dos nos em vês do nó completo com as referencias ?

    Podem dar-me ai um exemplo de codigo ou assim pra ficar um pouco mais clarificado?

    obrigado
     
  5. gupi

    gupi Power Member

    Nao porque sao private (ou deviam ser) os valores do nó
     
  6. ceptrus

    ceptrus Power Member

    PtNo inverter (PtNo raiz) {
    /* verifica se o ponteiro está vazio */
    if (raiz.equals(NULL))
    return NULL;

    /* fazer a troca do next com o previous */
    PtNo aux = raiz.next;
    raiz.next = raiz.prev;
    raiz.prev = aux;

    /* teste de chamada recursiva */

    /* se o proximo elemento (neste caso como já foi feita a troca é o previous) for
    diferente de NULL, então volta-se a chamar a função.
    caso contrario, é pk estás no ultimo elemento da lista e entao tens que retornar
    o endereço desse elemento */

    if (!raiz.prev.equals(NULL))
    return inverter(raiz.prev);
    else
    return raiz;
    }


    Não testei, mas esta solução recursiva parace-me resolver o teu problema..
    foi feita às 3 pancadas, e se nao vais trabalhar com um número mt grande de nós, a diferenca de desenpenho é nula.

    atençao k o código é um bocado misto de C com java.. o facto de ultimamente só trabalhar em C e já nao pegar em java à bastante tempo, depois acontece isto
     
    Última edição: 20 de Junho de 2009

Partilhar esta Página