java - 如何知道自定义 Java 节点是否包含在第二个节点中?
问题描述
我再次需要 Java 方面的帮助......我有这个简单的自定义 Node 类:
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;
}
对于Node p
i 的每个元素,必须检查是否也在Node q
. 如果为真,我增加一个我调用的整数count
,否则我什么也不做。一旦对所有 p 元素完成此检查,我检查是否count == size of Node p
或Node p is empty aka 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);
使用那些我应该得到的节点true
,但我只在p == null
方法的返回值中包含指令的地方得到它。
你们将如何实现方法?希望我已经清楚了。非常感谢
解决方案
考虑这些代码行:
while(p != null){
...
}
return ... || p == null;
显然,这总是会返回 true,因为当循环退出时 p 总是为空。
我建议你用两种方法实现逻辑。第一个检查节点或其后继节点是否包含元素。第二个检查具有第二个节点的所有元素。
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));
}
推荐阅读
- javascript - 如何删除突出显示的单词后的多余空格?
- excel - 首次打开工作簿时显示自动计算
- php - Laravel 5.6 - 如何使用命令行参数运行作业或事件?
- javascript - 如何在 React JS 渲染方法中使用变量?
- javascript - 我的自定义指令不影响模型绑定到角度 6 中的输入类型单选按钮
- c# - C# Linq:将多个 .Where() 与 *OR* 子句组合
- java - 我可以为 OpenGL 中的静态对象推送一次矩阵吗?
- flutter - 在列表视图中滚动地图时如何避免滚动列表视图
- python - 如何在 Scikit Learn 中预测新文档的类别
- javascript - 如何将“isTrusted”设置为 true(模拟 MouseEvent)?