如何检查双向链接列表在Java中是否正确链接?

时间:2018-10-02 21:55:10

标签: algorithm data-structures

我正在为Coin对象的列表实现抽象数据类型。 这应该是一个双向链接列表

这些是字段:

private Coin prev, next; 
private Card head, tail;
private int size;

现在,我的问题是如何检查硬币是否在双向链表中正确链接。

要检查的字母:

  • 从头开始,遍历列表中的所有元素,检查每个元素是否都有下一个元素/硬币。
    • 如果是,那么下一个有上一个吗?
      • 如果是,则它不为null,并且必须为x。然后,增加x
      • 如果没有,那就不好了!
    • 如果否(/如果没有下一个元素)...
      • 检查长度是否为1
        • 如果是1,那就好!
        • 如果还有,那就不好了!

(所有这些都应该在没有参数的布尔方法内)。此方法只是检查列表是否具有正确的链接格式(双链表)

(这不是作业问题)

2 个答案:

答案 0 :(得分:1)

您忘记了几件事:

  1. 在开始时,检查以查看head.prev == null。 (在head之前不能有节点。)
  2. 在开始时,检查以查看tail.next == null。 (tail之后不能有节点。)
  3. 保留节点数,以便如果计数超过size,则列表不正确。
  4. 如果您达到tail并且计数少于size,则该列表不正确。
  5. 如果您遇到head以外的节点,且其指针具有空的prev,则该列表不正确。
  6. 如果您遇到tail以外的节点,且其指针具有空的next,则该列表不正确。

答案 1 :(得分:0)

  1. 创建一个集合来存储迭代硬币。设置迭代= new HashSet();
  2. 从HEAD Coin进行迭代,如果在集合中不存在下一个,则检查next是否为null,如果next为null,则结束检查,否则,检查current == current.next.previous,然后将当前硬币放入集合中。否则,“双重链接”中会出现错误,您可以返回false并停止检查。
  3. 如果下一个在集合中,则检查下一个是否是HEAD硬币,如果不是,则在链表中存在部分循环(不确定这是否合法,但这是一个很好的问题问)。如果下一个是HEAD硬币,则它是一个循环的双链表,因此HEAD硬币的前一个应该是TAIL硬币。否则,这是非法的。
  4. 如果迭代时达到null,则表示没有LOOP,因此HEAD的前一个应为NULL。
  5. 在迭代时保持计数,并检查计数是否正确。
  6. 相应地检查头和尾。