我正在解决如何比较两个节点的问题。 我无法弄清楚我的代码中缺少什么。我在编程网站上解决了这个问题,我不理解输入,所以我无法理解为什么我的程序没有按照我的预期进行。
输入格式 您必须完成int CompareLists(Node * headA,Node * headB)方法,它接受两个参数 - 两个链接列表的头部进行比较。你不应该从stdin / console读取任何输入。
<tbody>
<tr>
<% adviser.state.split(';').each do |state| %>
<% next if state.blank? %>
<td><%= state %></td>
<% end %>
</tr>
</tbody>
输入(stdin)
4
4
1 2 3 4
4
1 2 3 4
3
1 2 3
4
1 2 3 4
1
12
1
13
2
4 15
2
15 4
我的输出 1 1 0 0
预期输出 1 0 0 0
答案 0 :(得分:1)
我看到你的代码有两个(可能是三个)问题。
首先,前两个if
测试的顺序需要颠倒过来:
if (headA == null && headB == null) {
return 1;
}
if (headA==null || headB==null){
return 0;
}
在您当前的代码中,只要第二次测试成功,第一次测试就会成功,因此当两个(或两个)列表都是0
时,您将始终返回null
。
其次,只要列表变为while
,您的null
循环就会退出,但只有当两个列表都为1
时,您才应返回null
。 (也就是说,只有两个列表长度相同且所有元素具有相同的数据值时,它们才相等。)将最后一行更改为:
return headA == null && headB == null;
您可能还有其他问题,具体取决于data
中Node
字段的数据类型。如果它是基本类型(int
,double
等),那么您的代码就可以了;如果它是引用类型(例如,String
),您可能应该使用.equals()
而不是==
来测试相等性。
if(headA.data.equals(headB.data)){ ... }
P.S。是否有理由返回int
值而不是boolean
真值?
答案 1 :(得分:0)
尝试if(headA.data.equals(headB.data)
另外请务必实施并覆盖Node
equals()
方法
https://www.sitepoint.com/implement-javas-equals-method-correctly/