【问题标题】:Displaying a linked list in java在java中显示链表
【发布时间】:2016-03-07 02:12:42
【问题描述】:

我正在处理一项任务,我需要在给定模板的情况下创建链接列表。对于创建的每个新节点,我需要打印出更新的列表。然而,到目前为止,我一直对如何打印出链表感到困惑。谁能弄清楚我做错了什么?我目前只是打印出已创建的数字,然后是空格,而不是到那时为止的整个列表。

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 + "";
  }

}

【问题讨论】:

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

标签: java


【解决方案1】:

我认为一旦添加了第二个元素,您的 toString() 就会无限循环。您需要将指针移动到下一个节点:

public String toString() {
      Node tmp = head;

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

      return result;
  }

我还更新了条件以处理空 head

【讨论】:

  • 感谢您的回复,我试过了,但我仍然只是得到一个空白输出
  • 你确定吗?我尝试了此修复并运行您的testInsertAtHead(),并且列表打印正确。而你现有的代码,main() 调用 testInsertInOrder() 将无法工作,因为你甚至还没有实现 insertInOrder()
  • @AdrianShum @jkaleel 代码正在调用 insertInOrder(),但尚未实现。
  • 哎呀,没看到。非常感谢大家,一切正常!
猜你喜欢
  • 2012-01-05
  • 2012-04-15
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
相关资源
最近更新 更多