我的链表的toString()方法只打印第一个元素

时间:2017-03-09 15:01:51

标签: java

我从头开始实现自己的java.util.linkedlist,所以我没有使用任何java.util.linkedlist功能。话虽这么说,我目前正在尝试创建自己的toString方法。这是我的节点类

private static class Node<T>{ 

  private T data; 
  private Node<T> next; 

  public Node(T d){ 
     next= null; 
     data = d; 
  }

  public Node(T d, Node<T> n){
     data = d; 
     next = n; 
  }

  public T getData(){ 
     return data; 
  }

  public void setData(T d){ 
     data = d; 
  }

  public Node<T> getNext(){ 
     return next; 
  }

  public void setNext(Node<T> n){ 
     next = n; 
  }
}

这是我的listclass

  private Node<T> start;
  private int size; 
  public ListNoOrder() {
  start = null; 
  size = 0;  
}

public void add(T newElt) {

  Node<T> temp = new Node<T>(newElt); 
  Node<T> current = start; 

  try{ if (newElt==(null));}
  catch (Exception illegalArgumentException){
     throw new IllegalArgumentException();}

  if (start == null){ 
     start = new Node<T>(newElt, null); 
  }

  if(current != null){ 
     while (current.next != null){ 
        current.setNext(temp); 
     }
  }
  size++; 
}

public int length() {
   return size;}
到目前为止

和我的toString方法

 public String toString() {
  String toPrint = ""; 
  Node <T> current = start; 

  while (current != null){ 
     toPrint += current.getData(); 
     if (current.next != null)
        toPrint += " ,"; 
     current = current.getNext(); 
  }
 return toPrint; 
}

当我测试方法时,它只打印列表的第一个元素。

mockList = 7,8,15,62,38,3 whatItsPrinting = 7,

我已经挣扎了几个小时。

1 个答案:

答案 0 :(得分:2)

add方法中,您只需在此处设置start变量

start = new Node<T>(newElt, null); 

但您从未设置下一个节点,因为next的{​​{1}} null ,因此以下条件永远不会为真

start

即使这种情况属实,也不会真正奏效 - 你需要做的是获得最后节点(没有if(current != null){ while (current.next != null){ // this one! current.setNext(temp); } } 的节点,并且只设置它next 1}})。像

这样的东西
next