linkedList的大小

时间:2015-07-21 21:50:46

标签: java linked-list

我是Java的新手,我得到了这个Linkedlist设置,我需要使用recursion或while循环来编写返回linkedList大小的size函数。我想当这个链表设置没有初始化Node,head等时,我对如何进行大小功能感到非常困惑。

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

4 个答案:

答案 0 :(得分:3)

在您当前的配方中,您的LinkedList实例实际上是节点和列表。没关系,但这意味着没有尊贵的" head"列表...

在此上下文中,修复方法是更改​​:

    Node Current = head;

    LinkedList current = this;

(并且,是的,size变量应该以{{1​​}}开头。在此公式中,空列表由1表示。如果您正在调用null size()的实例,那么列表的大小必须至少为1.)

@Konrad陈述"列表本身应该封装节点。"

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

答案 1 :(得分:2)

在链接列表中计算大小的另一种方法,例如您创建的链接列表,是使用递归。只有两种情况:

  1. 没有下一个的链接列表的大小为1 - 只是其本身
  2. 包含下一个的链接列表的大小为1加上下一个的大小。
  3. 因此,我们有以下功能:

    public int size(){
        if(next == null){
            return 1;
        } else {
            return 1 + next.size();
        }
    }
    

    使用三元运算符可以非常简洁地编写:

    public int size(){
        return next != null ? 1 + next.size() : 1;
    }
    

    对于迭代解决方案,不需要使用Node类,因为每个LinkedList对象都表示自身(单个值)和所有要遵循的值(a价值清单)。从这个角度来看,我们必须从" here"直到没有其他地方可去。

    public int size () {
       int size = 1;
       LinkedList Current = this;
       while(Current.next != null){
         Current = Current.next;
         size++;     
       }
       return size;
    }
    

答案 2 :(得分:1)

    $('input[type=checkbox]:checked').each(function() {

    var $tr =  $(this).closest('tr');

    var del_id = $(this).closest('tr').attr('data-id');

    $.each(del_arr, function(index, value ) {

        if (value == del_id){
            $tr.remove();
            console.log('Removing :'+  del_id +' And ' + value);
            return false;
        }
    });
})

答案 3 :(得分:0)

将其更改为:

public int size () {
    int size = 0;
    // set the head as current note
    Node current = head;
    // while a current node is set
    while(current != null)
    {
      // increment site
      size++;     
      // and set the next as current node
      current = current.next;
    }
    return size;
}

列表本身不是列表。它是一个链接的节点列表。列表本身应该封装节点。