我是Java的新手,为我提供了Linkedlist设置,我需要使用递归或while循环来编写size函数,该函数返回链表的大小。我想我对这个链表设置未初始化Node,head等时如何执行size函数感到非常困惑。

package list;

public class LinkedList {
  public int value;
  public LinkedList next;

  public LinkedList (int value, LinkedList next) {
    this.value = value;
    this.next = next;
  }

  public static LinkedList list () {
    return new LinkedList(1, new LinkedList(2, new LinkedList(3, null)));
  }

  public int size () {
    int size = 0;
    Node Current = head;
    while(Current.next != null)
    {
      Current = Current.next;
      size++;
    }
    return size;
  }
}

最佳答案

在当前公式中,您的LinkedList实例实际上既是节点又是列表。没关系,但这意味着列表中没有明显的“头” ...

在这种情况下,解决方法是更改​​:

    Node Current = head;




    LinkedList current = this;


(而且,是的,size变量应以1开头。在此公式中,空列表由null表示。如果在size()的实例上调用LinkedList,则大小为该列表必须至少为1。)



@Konrad指出“列表本身应该封装节点”。

实际上,这是一种设计选择。如果您遵循OO设计原则,那么应该这样做。但是,在某些情况下,您不希望这样做。有时有必要“牺牲”抽象以获得更好的性能或降低内存利用率。

10-08 01:38