2016-03-07 33 views
0

我正在做一个赋值,我需要创建一个给定模板的链表。对于创建的每个新节点,我需要打印出更新的列表。但是,直到这一点,我一直在如何打印链表。任何人都可以弄清楚我做错了什么?我目前刚刚打印出已创建的数字,后面是空格,而不是整个列表。在java中显示链表

NumberList.java

import java.util.*; 

public class NumberList { 

    private Node head; 

    public NumberList() { 
    } 
    public void insertAtHead(int x) { 
     Node newNode = new Node(x); 

     if (head == null) 
      head = newNode; 
     else { 
      newNode.setNext(head); 
      head = newNode; 
     } 
    } 
    public void insertAtTail(int x) { 
    } 
    public void insertInOrder(int x) { 
    } 
    public String toString() { 
     Node tmp = head; 

     String result = ""; 
     while (tmp.getNext() != null) { 
      result += tmp.toString() + " "; 
     } 

     return result; 
    } 
    //--------------------- 

    // test methods 

    //--------------------- 

    public static void testInsertAtHead() { 

     Random r = new Random(); 
     int n = 20; 
     int range = 1000; 

     NumberList list = new NumberList(); 

     for (int i=1; i<=n; i++) { 
       int x = r.nextInt(range); 
       list.insertAtHead(x); 
       System.out.println("" + x + ": " + list); 
     } 
    } 

    public static void testInsertAtTail() { 

     Random r = new Random(); 
     int n = 20; 
     int range = 1000; 

     NumberList list = new NumberList(); 

     for (int i=1; i<=n; i++) { 
       int x = r.nextInt(range); 
       list.insertAtTail(x); 
       System.out.println("" + x + ": " + list); 
     } 
    } 

    public static void testInsertInOrder() { 

     Random r = new Random(); 
     int n = 20; 
     int range = 1000; 

     NumberList list = new NumberList(); 

     for (int i=1; i<=n; i++) { 
       int x = r.nextInt(range); 
       list.insertInOrder(x); 
       System.out.println("" + x + ": " + list); 
     } 
    } 

    public static void main(String[] args) { 
     //testInsertAtHead(); 
     //testInsertAtTail(); 
     testInsertInOrder(); 
    } 
} 

Node.java

class Node { 

    private int number; 
    private Node next; 

    public Node(int n) { 
    this.number = n; 
    this.next = null; 
    } 
    public Node getNext() { 
     return next; 
    } 
    public int getNumber() { 
     return number; 
    } 
    public void setNext(Node n) { 
     if (n == null) 
      return; 

     n.setNext(next); 
     next = n; 
    } 
    public String toString() { 
     return number + ""; 
    } 

} 
+0

你到目前为止做了什么? –

回答

1

我觉得你toString()被不断地循环一次,第二元素添加。您需要将指针移动到下一个节点:

public String toString() { 
     Node tmp = head; 

     String result = ""; 
     while (tmp != null) { 
      result += tmp.toString() + " "; 
      tmp = tmp.getNext(); 
     } 

     return result; 
    } 

我还更新了状态来处理空head

+0

感谢您的回复,我试过这个,但我仍然只是得到一个空白输出 – jkaleel

+0

你确定吗?我试过这个修复并运行你的'testInsertAtHead()',并且列表打印正确。并且您的'main()'调用'testInsertInOrder()'''的代码将不起作用,因为您甚至还没有实现'insertInOrder()' –

+0

@AdrianShum @jkaleel该代码调用'insertInOrder()'hasn没有实施。 – shmosel