【问题标题】:How should I define the contains() command for a LinkedList?我应该如何为 LinkedList 定义 contains() 命令?
【发布时间】:2020-02-25 02:50:06
【问题描述】:

我目前正在通过递归重新定义链接列表的命令,其中公共方法接受一个对象并调用具有 Node 参数但似乎无法弄清楚逻辑的私有 contains() 方法。

@Override
public boolean contains(Object o) {
    if (o.equals(contains(o))) {
        return true;
    }

    contains(o);
    return false;
}

private boolean contains(Node node) {
    if (node.next == null) {
        return false;
    }

    if (node == node.next) {
        return true;
    }

    return contains(node.next);
}

【问题讨论】:

  • 一个问题似乎是您的私有方法中的条件node == node.next。它检查参数node 是否等于它的next 节点,这可能不是您的意思。

标签: java list linked-list contains


【解决方案1】:

假设你被限制使用递归(而不是迭代),让我们看看你需要什么:

  1. 私有递归方法

递归方法必须有一个基本情况和一个对子问题的递归调用(在这种情况下是列表的其余部分)。

a) 基本情况:在这里的基本情况下,您要么找到具有预期键的节点,要么到达列表的末尾,类似于:

if (node == null) {
    return false;
}

if (key.equals(node.key)) {
    return true;
}

b) 递归调用:您必须使用next 节点(列表的其余部分)调用该方法。

return contains(key, node.next);

把这两个东西放在一起,你会得到以下方法:

private boolean contains(Object key, Node node) {

    if (node == null) {
        return false;
    }

    if (key.equals(node.key)) {
        return true;
    }

    return contains(key, node.next);
}
  1. 公共方法

公共方法只需要一个键并调用递归方法,其中节点指向列表的头部。

@Override
public boolean contains(Object o) {
    returns contains(o, this.head);
}

如果你按照上面的模板练习一些简单的递归问题会很有帮助,只是为了掌握一些东西。

【讨论】:

    猜你喜欢
    • 2019-09-30
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2022-01-23
    • 2016-12-16
    相关资源
    最近更新 更多