所以我在这里遇到一点问题,我试图从右到左,从左到右打印一个列表,这段代码从右到左,但从左到右没有任何帮助,请不要有任何帮助吗?
我的代码:
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个数字3,6和5:
La Lista Creada es:
Campo Informacion de derecha a izquierda :(从右到左(罚款))
-3- -6- -5-
Campo Informacion de izquierda a derecha :(从左到右只有一个数字)
-5-
抱歉我的英语不好,感谢您的帮助,谢谢!
答案 0 :(得分:0)
好吧,我不完全确定 ligader 和 ligaizq 是什么意思。但是假设你想要实现一个双向链表,我希望它们能够在列表中指出之前的和 next 节点。
您需要在输入法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 + "- ");
}