【问题标题】:printing nodes from a singly-linked list从单链表打印节点
【发布时间】:2013-05-10 00:35:37
【问题描述】:

我做了一个节点类,它是一个链表类。有什么办法可以打印出这个列表中的元素吗?我创建了print() 方法,但它只返回第一个元素,即 21。如何遍历该列表?

public class ListNode {
    private int item;
    private ListNode next;

    public ListNode(int item, ListNode next){
        this.item = item;
        this.next = next;
    }

    public ListNode(int item){
        this(item, null);
    }

    public int print(){
        return item;
    }

    public static void main(String[] args) {            
        ListNode list = new ListNode(21, new ListNode(5, new ListNode(19, null)));
        System.out.println(list.print());
    }

}

【问题讨论】:

  • 您的 print() 方法具有误导性 - 鉴于当前的实现,它应该被称为 getValue()

标签: java singly-linked-list


【解决方案1】:
public String toString() {
    String result = item + " ";
    if (next != null) {
        result += next.toString();
    }
    return result;
}

然后你可以简单地做

System.out.println(list.toString());

(我将您的函数从 print 重命名为 toString 以更准确地描述它的作用)

【讨论】:

    【解决方案2】:

    您当前的实现不打印任何内容:它只是返回项目。 更合适的实现如下所示:

    public void print() {
        System.out.println(item); 
    }
    

    然后您可以使用递归来打印所有项目:

    public void printAll() {
        print();
        if (next != null) {
            System.out.println("; ");
            next.printAll(); 
        }
    }
    

    【讨论】:

      【解决方案3】:

      考虑创建一个printall

      public void printAll(){
          System.out.println(item);
          if (next != null){
              next.printAll();
          }
      }
      

      【讨论】:

        【解决方案4】:

        您的 print() 函数只返回一个项目,这就是它只打印 21 的原因。

        递归调用打印所有值直到next != NULL

        【讨论】:

          【解决方案5】:

          调用 list.print() 只会返回头部 (21) 的值 - 您永远不会对下一个节点进行任何引用或调用:next

          就个人而言,我会删除 print() 方法,而是覆盖 toString():

          @override
          public String toString(){
              return item + "\n" + next;
          }
          

          我猜你可能不希望打印空尾,所以这可能更好:

          @override
          public String toString(){
              if(next) {
                  return item + "\n" + next;
              } else {
                  return item + "\n";
              }
          }
          

          然后进入,主要:

          public static void main(String[] args) {            
              ListNode list = new ListNode(21, new ListNode(5, new ListNode(19, null)));
              System.out.println(list);
          }
          

          【讨论】:

            【解决方案6】:

            您可以使用 foreach 循环:

            List<ListNode> theList = new LinkedList<ListNode>();
            //add stuff to the list
            for(ListNode n:theList)
               System.out.println(n.print();
            

            这将遍历列表并返回下一个对象,在这个对象上我们调用print() 方法

            【讨论】:

              猜你喜欢
              • 2023-02-25
              • 1970-01-01
              • 1970-01-01
              • 2017-04-22
              • 2020-03-17
              • 2021-12-20
              • 1970-01-01
              • 2020-01-04
              • 1970-01-01
              相关资源
              最近更新 更多