我尝试使用以下代码在java中实现单向链表。我编写了代码,使用户输入任意数量的数字,最后当他点击键盘程序上的回车键时,会显示他输入的所有数字。
例如,如果用户输入类似 12345548963256987451236589745 的内容,然后输入应生成此结果"12345548963256987451236589745"。
我知道我可以简单地使用字符串或 BigInteger 来做到这一点,但我只是想用链表来尝试一下。
public static void main(String [] args)
{
Node start=null,end=null;
Scanner in = new Scanner(System.in);
char ch ;
ch = in.next();
while(ch.charAt(0)!='n')
{
Node n = insert(ch-48);
if(start==null)
{
start = n;
end = n;
}
else
{
end.next=n;
end = n;
}
ch = in.next();
}
Node n = start;
while(n!=null)
{
System.out.print(n.data);
n=n.next;
}
}
private static Node insert(int i) {
Node n = new Node();
n.data=i;
n.next = null;
return n;
}
出于某种原因,程序将进入无限循环。我的意思是它永远不会从输入部分出来。
我想我用这行搞砸了一些东西: ch.charAt(0(!=''
那么我应该改变什么呢?
我最初在 C 语言中尝试过这个,并试图在 JAVA 中模仿相同的方法,它在 C 语言中工作,但在 JAVA 中却遇到了麻烦。
如果你真的想逐个字符,你可以做如下的事情。
请注意,in.next(( 将只使用忽略 '/n' 的字符,所以你应该使用 in.nextLine((,那么在空行('/n' 按下(的情况下,行长为零。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String line = in.nextLine();
int iter = 0;
while (iter < line.length()) {
// Node logic
iter++;
if(iter == line.length()){
iter = 0;
line = in.nextLine();
}
}
}
在此示例中,无需使用 Scanner
。您可以直接从System.in
读取字节(使用 InputStream::read()
方法(,并在获得非数字字符时立即停止。
package misc;
import java.io.IOException;
public class Node {
private int data;
private Node next;
public static void main(String[] args) throws IOException {
Node start = null, end = null;
int ch;
while(Character.isDigit(ch = System.in.read())) { // or: while((ch = System.in.read()) != 'r') {
Node n = insert(ch - 48);
if (start == null) {
start = n;
end = n;
} else {
end.next = n;
end = n;
}
}
Node n = start;
while (n != null) {
System.out.print(n.data);
n = n.next;
}
}
private static Node insert(int i) {
Node n = new Node();
n.data = i;
n.next = null;
return n;
}
}
示例输入:"12345">
示例输出:12345