附加到Java中的链接列表

时间:2018-09-29 23:28:11

标签: 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() {
  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);
}
    }

3 个答案:

答案 0 :(得分:1)

while (current.getNext() == null) {
    current.setNext(newNode);
    current = newNode;
}

这是不正确的;因为您没有跟踪列表的结尾,所以需要遍历整个列表,然后将newNode添加到末尾(我相信您已经知道了)。为此,只需将current设置为current.getNext()直到current.getNext()null,然后调用current.setNext(newNode);

Node next;

while ((next = current.getNext()) != null) {
    current = next;
}

current.setNext(newNode);

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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