比较Java中的两个链表

时间:2017-08-04 20:53:31

标签: java

我正在解决如何比较两个节点的问题。 我无法弄清楚我的代码中缺少什么。我在编程网站上解决了这个问题,我不理解输入,所以我无法理解为什么我的程序没有按照我的预期进行。

输入格式 您必须完成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

2 个答案:

答案 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;

您可能还有其他问题,具体取决于dataNode字段的数据类型。如果它是基本类型(intdouble等),那么您的代码就可以了;如果它是引用类型(例如,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/