首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linkedList尺寸

linkedList尺寸
EN

Stack Overflow用户
提问于 2015-07-21 21:50:46
回答 4查看 10.4K关注 0票数 1

我对Java非常陌生,我得到了这个linkedList设置,我需要使用递归或while循环来编写返回Linkedlist大小的大小函数。当这个链接列表设置没有初始化Node、head等时,我想我很困惑如何执行size函数。

代码语言:javascript
复制
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;
  }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-21 22:04:01

在当前的公式中,LinkedList实例实际上是节点和列表。没关系,但这意味着名单上没有什么特别的“头”.

在这种情况下,解决办法是改变:

代码语言:javascript
复制
    Node Current = head;

代码语言:javascript
复制
    LinkedList current = this;

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

@Konrad声明:“列表本身应该封装节点。

事实上,这是一个设计上的选择。如果你遵循的是面向对象的设计原则,那么它应该。然而,在某些情况下,从务实的角度来看,您不希望这样做。有时,为了获得更好的性能或降低内存利用率,有必要“牺牲”抽象。

票数 3
EN

Stack Overflow用户

发布于 2015-07-21 22:06:22

在链接列表中计算大小的另一种方法是使用递归。只有两起案件:

  1. 没有next的链接列表具有大小1 --只是它本身
  2. 具有next的链接列表具有大小1加上next的大小。

因此,我们有以下功能:

代码语言:javascript
复制
public int size(){
    if(next == null){
        return 1;
    } else {
        return 1 + next.size();
    }
}

这可以用三元操作符写得非常简洁:

代码语言:javascript
复制
public int size(){
    return next != null ? 1 + next.size() : 1;
}

对于迭代解决方案,不需要使用Node类,因为每个LinkedList对象既表示自身(一个值),也表示要遵循的所有值(值列表)。从这个角度来看,我们必须从“这里”循环,直到没有其他地方可去。

代码语言:javascript
复制
public int size () {
   int size = 1;
   LinkedList Current = this;
   while(Current.next != null){
     Current = Current.next;
     size++;     
   }
   return size;
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-21 22:04:36

代码语言:javascript
复制
public int size()
{
    int size = 1;
    LinkedList head = this;
    while (head.next != null)
    {
        head = head.next;
        size++;
    }

    return size;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31550239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档