Java链表递归方法

时间:2019-05-01 08:15:53

标签: java recursion

我不了解链表数据结构以及递归在其中的工作方式。我了解正常的递归,但根本没有链接列表。

下面的代码是带有A元素的链接列表类。它的头部为A元素,列表的其余部分(尾部)为另一个链接列表。

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

public class LL<A>  {
  private final A hd;
  private final LL<A> tl;

  public boolean isEmpty(){    
    return hd==null && tl==null;
  }

  public LL(A hd, LL<A> tl) {
    this.hd = hd;
    this.tl = tl;
  }

 public LL() {
    this(null,null);
 }

public int size() {
    if (isEmpty())    
      return 0;    
    return 1 + tl.size();
 }

 public A get(int i) {
    return i==0?hd:tl.get(i-1);
 }

LL<A> drop(int i){

        if(i==0) return this;

        if(i<0) return new LL<>();

        if(isEmpty()) return new LL<A>();


        return this.tl.drop(i-1);
    }

}

因此,例如,此drop方法使用第一个i元素以外的元素创建一个新的链表。我不知道它是如何工作的。假设如果我在链接列表上调用drop(1),它将逐步执行什么操作?

1 个答案:

答案 0 :(得分:0)

drop仅在特殊情况下创建一个新列表。

如果列表包含n个元素,并且在i i+1个链接,该链接等效于删除了前i个元素的原始列表。

this.tlthis引用列表的尾部,换句话说this.tl是您删除第一个元素后从this获得的列表。 / p>

例如,假设列表中至少包含一个元素,则drop(1)将返回this.tl.drop(0),后者将返回this.tl-即原始列表中没有第一个元素。