Java中两个链表的比较
我正在解决一个关于如何比较给定头部的两个节点的问题。 我无法找出我的代码中缺少了什么。我正在一个编程网站上解决这个问题。我不理解输入,所以我无法理解为什么我的程序没有达到我预期的效果 输入格式 您必须完成int CompareLists(Node*headA,Node*headB)方法,该方法接受两个参数——要比较的两个链表的头。您不应该从stdin/console读取任何输入Java中两个链表的比较,java,Java,我正在解决一个关于如何比较给定头部的两个节点的问题。 我无法找出我的代码中缺少了什么。我正在一个编程网站上解决这个问题。我不理解输入,所以我无法理解为什么我的程序没有达到我预期的效果 输入格式 您必须完成int CompareLists(Node*headA,Node*headB)方法,该方法接受两个参数——要比较的两个链表的头。您不应该从stdin/console读取任何输入 int CompareLists(Node headA, Node headB) { if(hea
int CompareLists(Node headA, Node headB) {
if(headA==null || headB==null){
return 0;
}
else if(headA == null && headB == null) {
return 1;
}
while(headA!=null &&headB!=null){
if(headA.data==headB.data){
headA=headA.next;
headB=headB.next;
}
else{
return 0;
}
}
return 1;
}
输入(标准输入)
四,
四,
1234
四,
1234
三,
1 2 3
四,
1234
一,
十二,
一,
十三,
二,
4.15
二,
15 4
我的输出
1.
1.
0
0
预期产出
1.
0
0
0尝试if(headA.data.equals(headB.data)
还要确保实现并覆盖节点
equals()
方法
我发现您的代码有两个(可能有三个)问题
首先,如果需要颠倒前两个测试的顺序:
if (headA == null && headB == null) {
return 1;
}
if (headA==null || headB==null){
return 0;
}
在当前代码中,只要第二个测试成功,第一个测试就会成功,因此当其中一个(或两个)列表都为null
时,您将始终返回0
第二,当任一列表变为null
时,您的while
循环就会退出,但只有当两个列表都为null
时,您才应该返回1
(也就是说,只有当两个列表长度相同且所有元素的数据值相等时,这两个列表才相等。)将最后一行更改为:
return headA == null && headB == null;
根据节点
中数据
字段的数据类型,您可能会遇到另一个问题。如果它是基本类型(int
,double
,等等),您的代码就可以了;如果它是引用类型(例如,字符串
),您可能应该使用.equals()
而不是=
来测试相等性
if(headA.data.equals(headB.data)){ ... }
p.S.是否有任何理由返回int
值而不是boolean
真值?我们也不能。这主要是因为您没有告诉我们问题是什么。或者节点是什么。如果您想在两个列表都null
时返回1
,则需要颠倒If
测试的顺序s、 事实上,当第二个if
测试的计算结果为true
时,它不会通过测试用例,这不是一个有用的编辑。您需要向我们展示一个示例输入、您的预期输出,以及您为什么认为您期望这个输出(不仅仅是“测试用例这么说”),以及实际的输出。您可能想解释输入格式,这样我们就不必猜测了。(实际上,所有这些都是无关的,您真正想指出的是,当一个列表是{1,2,3}而另一个列表是{1,2,3,4}时,该方法会失败。)您能解释一下输入格式吗equals()的用法是什么
OP问题中节点对象的方法?该函数的原型已经给出,我只需要实现它。@Karthik-Gotcha.你能告诉我应该修改什么吗,我不明白你答案的第二部分吗第二部分的简短版本是简单地替换出现在e方法末尾返回headA==null&&headB==null;
,原因在答案中解释。headA=null&&headB=null将是布尔值