Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的链表链接_Java_Linked List_Singly Linked List - Fatal编程技术网

Java中的链表链接

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() {

代码可以编译并运行,但是addToEnd方法不起作用,我觉得这是对的,但我不确定错误在哪里,有人能告诉我需要修复什么或在哪里修复代码吗

这是我的另一个类的代码

 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); 
    }
}