当前位置: 首页 > 知识库问答 >
问题:

如何知道自定义 Java 节点是否包含在第二个节点中?

陶文林
2023-03-14

我再次需要一些Java帮助...我有这个简单的自定义节点类:

class Node{
    private int elem;
    private Node next;

    public Node(int elem, Node next){
        this.elem = elem;
        this.next = next;
    }

    public int getElem(){
        return elem;
    }

    public void setElem(int elem){
        this.elem = elem;
    }

    public Node getNext(){
        return next;
    }

    public void setNext(Node next){
        this.next = next;
    }
}

我需要实现一个静态布尔方法,该方法将两个节点作为参数,如果第一个节点的所有元素都包含在第二个节点中,则返回true。示例输出:

        1) Node p {5} Node q {5,5} returns true since element 5 of Node p is also in Node q
        2) Node p {1,3,5} Node q {0,1,2,3,4,5} returns true since 
        all elements of Node p are also in Node q
        3) Node p {5,3} Node q {3,4,6} returns false because 
        element 5 of Node p is not in Node q
        4) If first Node given as parameter to method is empty
        (with no values), the method will return true.

这是我的想法:

public static boolean included(Node p, Node q){
        //every element in p is in q?
        int count = 0;
        int temp = 0;
        int length = 0;
        while(p != null){
            temp = p.getElem();
            length++;
            while(q != null){
                if(q.getElem() == temp)
                    count++;
                q = q.getNext();
            }
            p = p.getNext();
        }
        return length == count || p == null;
    }

对于< code >节点p的每个元素,我必须检查它是否也在< code >节点q中。如果为真,我增加一个名为< code>count的整数,否则我什么也不做。一旦在所有p元素上完成了这个检查,我就检查< code>count ==节点p的大小或者< code >节点p是否为空,也就是null

问题是:此方法总是返回true。我试图从返回值中删除p==null并且发生了一些变化,所以我怀疑这就是问题所在,所以我向您展示了如何创建节点:

        Node p = null;
        Node q = null;
        int arr1[] = {5,4,3,2,1,0};
        int arr2[] = {5,3,1};
        for(int i = 0; i < arr1.length; i++)
            p = new Node(arr1[i], p);
        for(int i = 0; i < arr2.length; i++)
            q = new Node(arr2[i], q);

对于这些节点,我应该得到<code>true,但只有当指令<code>p==null

你们将如何实施方法?希望我已经说清楚了。非常感谢

共有1个答案

邹修真
2023-03-14

考虑以下代码行:

    while(p != null){
        ...
    }
    return ... || p == null;

显然,这总是会返回true,因为当循环退出时,p总是为null。

我建议您在两种方法中实现逻辑。第一个检查节点或其后续节点是否包含元素。第二个检查具有第二个节点的所有元素。

boolean hasElement(int elem) {
    return this.elem == elem || (next != null && next.hasElement(elem));
}

boolean hasAllElements(Node node1, Node node2) {
    return node2.hasElement(node1.elem) && (next == null || hasAllElements(next, node2));
}
 类似资料:
  • 我遇到了这个问题,似乎在任何地方都找不到解决办法。 给定一个二叉树,其中每个节点都包含一个数字,表示其子树中剩余节点的数量,编写一个函数,返回第n个按顺序遍历的节点。 查找按序遍历的第n个节点相当简单,但如何使用关于左节点数的信息来改进该过程?

  • 问题内容: 据我所知,“ …”表示下面代码段中数组的长度。 另一方面,正如我猜想的那样,“ …”表示将以下代码段中的切片拆分为int的参数。我对此不太确定。 现在,两种含义的差异使我很难理解“ …”是什么。 问题答案: 您已经注意到Go中的两种情况。实际上,有3个: 在编译时 评估为[3] int {1,2,3} 解压缩作为函数的参数。这与您错过的一个(可变参数的定义)相匹配: 现在是另一个问题(

  • 我遇到了一个问题,我知道如何计算树中的所有节点,像这样

  • Windows, VSC,运行得到了这个 npm WARN生命周期用于脚本的节点二进制文件是C:\Program Files\nodejs\node.exe但npm使用的是C:\某地\AppData\漫游\npm\node_modules\节点\bin\node.exe本身。使用选项包含节点二进制npm执行时使用的路径。 我理解这意味着我的本地版本与PATH变量(C:\Program Files…

  • 我目前正在为XML文档流开发一个自定义管道组件,其中根节点和该根节点的第一个子节点需要剥离,只剩下第二个子节点(现在是新的根节点)。 我正在使用XDocumt作为XML文档的容器类。我写了一些代码,获取第二个子节点,并创建一个新的XML文档,将该节点作为根节点,从而从图片中删除两个不需要的节点。 但是当我在Biztalk中测试这个设置时,我只得到一个空文档作为响应。它似乎创建了一个空的XML文档,

  • 只是想知道是否有任何API可以知道在Curator框架中使用CuratorFramework类的特定节点是领导者。我正在使用LeaderLatch,但即使节点是leader(由Zookeeper框架选择),也无法工作。 注意:在集群设置中配置了3个节点。 Zookeeper框架将负责选择节点。我需要知道选定的策展人客户是否指向领导者。 输出是 如果领导相应的微服务失败,则需要选择其他领导。每个微服