gpt4 book ai didi

java - 我的 Java 链表代码有什么问题?

转载 作者:行者123 更新时间:2023-12-01 18:41:27 24 4
gpt4 key购买 nike

我创建了两个类,即 Node 和 LinkedList。该代码是可编译的,但它永远不会生成我存储在链接列表中的最后数据。

考虑这两个类

Node.java

public class Node {

private int id;
private String name;
private Node next;

public Node(int id, String name) {
this.id = id;
this.name = name;
}

public int getID() {
return id;
}

public String getName() {
return name;
}

public void setID(int id) {
this.id = id;
}

public void setName(String name) {
this.name = name;
}

public Node getNext() {
return next;
}

public void setNext(Node next) {
this.next = next;
}

public Node(int id, String name, Node next) {
this.id = id;
this.name = name;
this.next = next;
}

}

LinkedList.java

public class LinkedList {

private Node start;

public LinkedList() {
start = null;
}

public static void main(String[] args) {
LinkedList list = new LinkedList();

list.create(2345,"Peter");
list.create(3001,"Mary");
list.create(4763,"John");
list.create(3863,"Johnny");

list.display();
}

public void create(int id, String name) {
if(start == null) {
start = new Node(id, name, start);
}
else {
Node temp = start;

while(temp.getNext() != null) {
temp = temp.getNext();
}
Node newNode = new Node(id, name, null);
temp.setNext(newNode);
}
}


public void display() {
if(start == null) {
System.out.println("\nThe list is empty!");
}
else {
Node temp = start;

while(temp.getNext() != null) {
System.out.println("ID : " + temp.getID() + " Name : " + temp.getName());
temp = temp.getNext();
}
}
}

public void delete(int id, String name) {
Node previous = start;
Node temp = start;

while(temp.getID() != id) {
if(temp.getNext() == null) {
System.out.println("\nElement "+ id + " not found !");
break;
}

while(temp.getName() != name) {
if(temp.getNext() == null) {
System.out.println("\nElement "+ name + " not found !");
break;
}

previous = temp;
temp = temp.getNext();

}
if(temp == start) {
start = start.getNext();
}
else {
previous.setNext(temp.getNext());
}
}
}
}

在这种情况下,程序将生成列表中存储的所有内容,但不会生成最后一个。

也就是说,程序不会显示下面一行,而存储的前三个数据可以毫无问题地输出。

list.create(3863,"Johnny");

我可以知道我的代码有什么问题吗?提前致谢! =)

最佳答案

您不需要在 display() 中调用 temp.getNext() 两次。您可以使用:

public void display() {
if(start == null) {
System.out.println("\nThe list is empty!");
}
else {
Node temp = start;

while(temp != null) {
System.out.println("ID : " + temp.getID() + " Name : " + temp.getName());
temp = temp.getNext();
}
}
}

当您调用 temp.getNext() 来检查循环是否应停止时,您会错过最后一个元素。

关于java - 我的 Java 链表代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19834956/

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