gpt4 book ai didi

java - 如何在java中显示链接列表中的项目

转载 作者:行者123 更新时间:2023-12-01 15:33:31 25 4
gpt4 key购买 nike

大家好,我想知道如何显示链接列表中的所有节点。这是我到目前为止的代码。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com