2014-11-17 3 views
0

Итак, у меня есть небольшая проблема, я пытаюсь распечатать список справа налево и слева направо, этот код работает тонкой печатью справа налево, но слева направо нет, любая помощь пожалуйста ?Печать списка java

Мой код:

package listas; 

import java.util.Scanner; 


class nodo { 

    int info; 

    nodo ligader; 
    nodo ligaizq; 
} 

class Listas { 

    static nodo F = null; 
    static nodo Q = null; 
    static nodo P = null; 
    static nodo x = null; 
    static nodo T = null; 

    public static void main(String args[]) { 
     Scanner y = new Scanner(System.in); 
     int m = 0; 

     do { 
      try { 
       System.out.println("Menu"); 
       System.out.println("1. Crea Inicio");    
       System.out.println("2. Insertar antes de referencia "); 
       System.out.println("3. Mostrar"); 
       System.out.println("4. Salir"); 
       System.out.println("Opcion:"); 
       m = Integer.valueOf(y.next()); 
      } catch (NumberFormatException e) { 
       System.out.print(""); 
      } 

      try { 
       switch (m) { 
        case 1: 
         creaininodo(); 
         System.out.println("Termina Programa que Crea Inicio de Lista"); 
         break; 
        case 2: 
         InsertarAntes(); 
         break; 
        case 3: 
         Mostrar(); 
         break; 
        case 4: 
         System.exit(0); 
         break; 
        default: 
         System.out.println("La opcion que escogio no se encuentra,favor de escoger otra."); 
         break; 

       } 

      } catch (NumberFormatException e) { 
       System.out.println("Datos introducidos erroneos."); 
      } 
     } while (m != 4); 
    } 

    public static void creaininodo() { 

     Scanner y = new Scanner(System.in); 
     int opc = 1; 
     int dato; 
     if (P == null) { 
      P = new nodo(); 
      System.out.println("Dame Dato: "); 
      dato = Integer.valueOf(y.next()); 
      P.info = dato; 
      P.ligaizq = null; 
      P.ligader = null; 
      F = P; 
     } 

     do { 
      Q = new nodo(); 
      System.out.println("Dame Dato: "); 
      dato = Integer.valueOf(y.next()); 
      Q.info = dato; 
      Q.ligader = P; 
      Q.ligaizq = null; 
      P = Q; 

      System.out.println("Otro nodo 1(SI) 2 (NO)"); 
      opc = Integer.valueOf(y.next()); 
     } while (opc != 2); 

    } 

    public static void InsertarAntes() { 
     Scanner sc = new Scanner(System.in); 
     int ref; 
     int dato; 
     System.out.println("Inserte un valor de referencia: "); 
     ref = Integer.valueOf(sc.next()); 
     Q = P; 
     boolean band = false; 

     while ((Q.info != ref) && (band == false)) { 
      if (Q.ligader != null) { 
       T=Q; 
       Q = Q.ligader; 

      } else { 
       band = true; 
      } 
     } 

     if (band == true) { 
      System.out.println("El elemento no fue enconntrado"); 
     } else { 
      x = new nodo(); 
      System.out.println("Inserte el nuevo valor: "); 
      dato = sc.nextInt(); 
      x.info = dato; 
      x.ligader = Q; 
      T.ligader=x; 
      Q.ligaizq = x; 
      x.ligaizq = T; 
      if (P == Q) { 
       P = x; 
      } 
     } 

    } 



    public static void Mostrar() { 

     System.out.println("La Lista Creada es: "); 
     System.out.println("Campo Informacion de derecha a izquierda:"); 
     for (nodo i = P; i != null; i = i.ligader) { 
      System.out.print(" -" + i.info + "- "); 
     } 
     System.out.println(" "); 
     System.out.println("Campo Informacion de izquierda a derecha:"); 
     for (nodo i = F; i != null; i = i.ligader) { 
      System.out.print(" -" + i.info + "- "); 

     } 
     System.out.println(" "); 
    } 
} 

В основном эта программа работает, давая некоторые номера в списке в случае 1 и 2 (в случае 2 вы просто выбрали ссылочный номер, который вы ранее добавить в случае 2, так что вы вставить номер в списке перед ссылочным номером), а в случае 3 проблема заключается в том, что код печатает справа налево, но не слева направо.

Например, мы выбираем случай 1 и добавляем 3 цифры 3,6 и 5 после того, что мы выбираем случай 3 и печатает:

La Lista Creada эс: Кампо-де-Informacion Derecha Izquierda: (право на левый (штраф)) -3- -6- -5-
Кампо-де-Informacion Izquierda Derecha: (слева направо только один номер) -5-

Извините за мой плохой английский, я ценю любую помощь , благодаря!

ответ

0

Ну, я не совсем уверен, что ligader и ligaizq средства. Но предположим, что вы хотите реализовать дважды связанный список, я ожидаю, что они укажут предыдущие и следующий узел в списке.

Вы хотите изменить следующие параметры в методе ввода creaininodo():

Q.info = dato; 
    Q.ligader = P; 
    P.ligaizq = Q; // instead of Q.ligaizq = null; 

, а затем изменить свой метод вывода для слева направо на самом деле использовать ссылку на предыдущий узел для обхода:

for (nodo i = F; i != null; i = i.ligaizq) { // using i.ligaizq! 
     System.out.print(" -" + i.info + "- "); 
    } 
+0

Если этот ответ помог вам решить вашу проблему, отметьте его как принятый, чтобы закрыть вопрос. –

+0

Это сделало трюк, большое спасибо! – user3522262

Смежные вопросы