大家好,我想知道如何显示链接列表中的所有节点。这是我到目前为止的代码。 Manager 类应该操作该列表。 movieNode 类为电影创建新的列表节点。我知道我还必须使用其他东西,但我只是想为初学者显示列表的第一个元素。
public class Manager {
MovieNode head;
public Manager (){
head=null;
}
public void Add (MovieNode data) {
if (head==null){
head=data;
}
}
public void Display () {
int i=1;
MovieNode temp=head;
System.out.println("Displaying Movies");
while (head!=null) {
System.out.println(temp.getData().getName());
head=null;
}
}
}
还有 MovieNode 类的代码
public class MovieNode {
private Movie data;
private MovieNode next;
public MovieNode (){
data=null;
next=null;
}
public MovieNode (Movie data){
setData(data);
}
public void setData (Movie data){
this.data=data;
}
public Movie getData (){
return data;
}
}
最佳答案
希望这能帮助您入门。以下是一些提示:
经理类
- 您不需要 Manager 的显式构造函数,因为您可以在线初始化
head
变量,并且不会将任何其他信息传递给构造函数 - Java 中的方法名称通常采用驼峰命名法并以小写字母开头
- 向链表添加新项时,可以仅传入
数据
并在add方法中创建节点 - 假设您不需要维护任何特殊顺序,您可以将新项目插入列表的头部。这节省了遍历整个列表以查找尾部或保留对尾部的引用的时间。
- 要显示所有电影,只需从
head
开始,检查列表中是否有节点next
。如果您不需要实现此自定义方法,我建议将该类实现为 Iterable。关于此主题的 SO 讨论可以找到 here
MovieNode 类
- 您只需要一个构造函数来获取
数据
并设置私有(private)变量 - 您还需要
next
变量的 getter 和 setter,以便保存列表结构并迭代列表 toString()
实现将允许直接打印此类的实例,如displayAllMovies()
方法
电影课
- 此类目前仅保存电影的
标题
,但您可以根据您的规范对其进行扩展。
这是代码:
public class Manager {
MovieNode head = null;
public void addMovie(Movie data) {
MovieNode newNode = new MovieNode(data);
if (head == null) {
head = newNode;
} else {
newNode.setNext(head);
head = newNode;
}
}
public void addMovieInOrder(Movie data) {
MovieNode newNode = new MovieNode(data);
if (head == null) {
head = newNode;
} else {
MovieNode higher = head;
MovieNode lower = null;
// find the right position for newNode
while(higher != null){
if(newNode.compareTo(higher) > 0){
lower = higher;
higher = higher.getNext();
}
else break;
}
newNode.setNext(higher);
if(higher == head) head = newNode; //inserting as head
else lower.setNext(newNode);
}
}
public void displayAllMovies() {
MovieNode node = head;
if (node == null) {
System.out.println("The list is empty!");
}
do {
System.out.println(node.getData());
node = node.getNext();
} while (node != null);
}
public static void main(String[] args) {
Manager manager = new Manager();
manager.addMovieInOrder(new Movie("ddd"));
manager.addMovieInOrder(new Movie("ccc"));
manager.addMovieInOrder(new Movie("aaa"));
manager.addMovieInOrder(new Movie("bbb"));
manager.displayAllMovies();
}
}
电影节点类:
public class MovieNode implements Comparable<MovieNode> {
private Movie data;
private MovieNode next = null;
public MovieNode(Movie data) {
this.data = data;
}
public void setData(Movie data) {
this.data = data;
}
public Movie getData() {
return data;
}
public void setNext(MovieNode node) {
this.next = node;
}
public MovieNode getNext() {
return next;
}
@Override
public String toString() {
return data.toString();
}
@Override
public int compareTo(MovieNode otherMovieNode) {
return data.compareTo(otherMovieNode.getData());
}
}
电影类:
public class Movie implements Comparable<Movie> {
private String title;
public Movie(String title) {
this.title = title;
}
@Override
public String toString() {
return title;
}
@Override
public int compareTo(Movie otherMovie) {
return title.compareTo(otherMovie.title);
}
}
关于java - 如何在java中显示链接列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254086/