整个夏天读一本关于Java数据结构的书,我很难理解链表和创建带节点的链表的基本原理。
具体来说,我试图弄清楚如何将一个未排序的整数文件传递到一个函数中,对它们进行排序,并打印排序后的链表。我知道我可能会让这件事变得比需要的更复杂,但我只是不明白这些节点究竟是如何链接的,以及如何返回它们。
我想我可以创建一个列表对象,并将其用作对第一个节点的引用,然后第一个节点将引用前一个节点,直到列表的末尾,用null表示。这是我试图从书中遵循的逻辑,但有些东西没有点击。
当我在main中调用readFile方法时,我得到了一个未定义的错误。这怎么可能?
import java.util.Scanner;
import java.util.List;
public class Node {
int value;
Node next;
/**
* Constructor
* @param value The element to store in this node, an integer from file
*/
public Node(int value) {
this.value = value;
next = null;
}
public static Node first;
public static Node last;
public void linkedList() {
first = null;
last = null;
}
/**
* function sorts integers
* @param inputFile file of integers from user
* @return linked list of sorted integers
*/
public static Node readFile(Scanner inputFile) {
while (inputFile.hasNext()) {
int data = inputFile.nextInt();
if (first == null) {
first = new Node(data);
last = first;
}
if (data < first.value) {
first.next = first;
first = new Node(data);
}
if (data > first.value) {
last.next = new Node(data);
last = last.next;
}
}
return first;
}
/**
* function prints linked list
*/
public void print() {
Node ref = first;
while (ref != null) {
System.out.println(ref.value + " ");
ref = ref.next;
}
}
}
这是我的主要驱动程序:
import java.util.Scanner;
import java.util.List;
import java.io.*;
public class listTesting {
private static final String FILENAME = "numbers.txt";
public static void main(String[] args) throws IOException {
Scanner keyboard = new Scanner(System.in);
System.out.print("Opening " + FILENAME);
File file = new File(FILENAME);
Scanner inputfile = new Scanner(file);
linkedList list = new linkedList();
// error here stating this method is undefined ??
list = readFile(inputfile);
System.out.println("nThe sorted linked list: ");
list.print();
}
}
在class listTesting中没有任何到Node类的链接。对于这条线路
list = readFile(inputfile);
编译器试图在listTesting类中找到静态方法。
下一个我不清楚的项目:
linkedList list = new linkedList();
// error here stating this method is undefined ??
list = readFile(inputfile);
您使用默认构造函数创建列表变量,但只是在使用readFile方法的结果对其进行更改之后。同样在Node类中,readFile返回Node类(非linkedList(。
我知道您还处于Java的初级阶段,所以请仔细阅读关于Java的书(甚至在数据结构之前尝试重复Java基础知识(。