对这个链表实现进行一些澄清

  • 本文关键字:链表 实现 java linked-list
  • 更新时间 :
  • 英文 :


我尝试使用以下代码在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

相关内容

  • 没有找到相关文章

最新更新