Java中的链表链接
代码可以编译并运行,但是addToEnd方法不起作用,我觉得这是对的,但我不确定错误在哪里,有人能告诉我需要修复什么或在哪里修复代码吗 这是我的另一个类的代码Java中的链表链接,java,linked-list,singly-linked-list,Java,Linked List,Singly Linked List,代码可以编译并运行,但是addToEnd方法不起作用,我觉得这是对的,但我不确定错误在哪里,有人能告诉我需要修复什么或在哪里修复代码吗 这是我的另一个类的代码 public class LinkedList { private Node head; /** * constructor * pre: none * post: A linked list with a null item has been created. */ public LinkedList() {
public class LinkedList {
private Node head;
/**
* constructor
* pre: none
* post: A linked list with a null item has been created.
*/
public LinkedList() {
head = null;
}
/**
* Activity: finds size of the Linked List.
* Pre-Condition: none
* Post-Condition: The size of the list is returned
*/
public int size() {
int counter = 0;
Node current = head;
while(current != null) {
counter++;
current = current.getNext();
}
return counter;
}
/**
* Adds a node to the end of the linked list.
* pre: String parameter
* post: The linked list has a new node at the end.
*/
public void addAtEnd(String s) {
Node current = head;
Node newNode = new Node(s);
if(head == null) {
head = newNode;
head.setNext(null);
}
else {
while(current.getNext() == null) {
current.setNext(newNode);
current = newNode;
}
}
}
private class Node {
private String data;
private Node next;
/**
* constructor
* pre: none
* post: A node has been created.
*/
public Node(String newData) {
data = newData;
next = null;
}
/**
* The node pointed to by next is returned
* pre: none
* post: A node has been returned.
*/
public Node getNext() {
return(next);
}
/**
* The node pointed to by next is changed to newNode
* pre: none
* post: next points to newNode.
*/
public void setNext(Node newNode) {
next = newNode;
}
/**
* The node pointed to by next is returned
* pre: none
* post: A node has been returned.
*/
public String getData() {
return(data);
}
}
}
这是我的主类代码,Blume和Dahl从未添加到列表中:
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addAtFront("Sachar");
list.addAtFront("Osborne");
list.addAtFront("Suess");
System.out.println("List has " + list.size() + " items.");
System.out.println(list);
list.addAtEnd("Blume");
list.addAtEnd("Dahl");
System.out.println(list);
}
}
这是不正确的;因为您没有跟踪列表的尾部,所以需要迭代整个列表,然后在末尾添加newNode
(我相信您已经理解了)。为此,只需将current
设置为current.getNext()
,直到current.getNext()
为null
,然后调用current.setNext(newNode)代码>
换成这个
else{
//iterate to the last node
while(current.getNext() != null) {
current = current.getNext();
}
//Append the new node to the end
current.setNext(newNode);
}
while(current.getNext()==null){
应该是while(current.getNext()!=null){
并且不是我否决了你的,我没有足够的分数
Node next;
while ((next = current.getNext()) != null) {
current = next;
}
current.setNext(newNode);
public void addAtEnd(String s) {
Node current = head;
Node newNode = new Node(s);
if(head == null) {
head = newNode;
head.setNext(null);
}
else {// problem is here. You need to find the node that has getNext()==null,
//so you need to loop all nodes where get next != null
while(current.getNext() == null) {
current.setNext(newNode);
current = newNode;
}
}
else{
//iterate to the last node
while(current.getNext() != null) {
current = current.getNext();
}
//Append the new node to the end
current.setNext(newNode);
}
public void addAtEnd(String s) {
Node current = head;
Node newNode = new Node(s);
if(current == null) {
head = newNode;
} else {
while(current.getNext() != null) {
current = current.getNext();
}
current.setNext(newNode);
}
}