宿題のサイクリックシングルリンクリストの最後に要素を追加しようとしています。しかし、どういうわけか私は多くの問題を抱えています。
私は_tail
ポインタを持っています、そして_dummy
。JUnitテストのaddメソッドは、addメソッドをチェックすると、1ではなくnullを返すことを示しています(1はリストに追加されたものです)
これが私のコードです
private static class Node<T>{
Node<T> next;
T data;
public Node(T data, Node<T> next){
this.next = next;
this.data = data;
}
}
private Node<T> _tail;
private int _count;
private int _version;
private Node<T> _dummy;
public CyclicLinkedList(){
_dummy = new Node<T>(null, null);
_dummy.next = _dummy;
_tail = _dummy;
_count = 0;
assert _wellFormed();
}
これが私のaddメソッドです
@Override
public boolean add(T x){
assert _wellFormed();
Node<T> n = new Node<T>(x, _tail.next);
_tail.next = n;
_tail = n;
++_version;
++_count;
assert _wellFormed();
return true;
}
assertWellformedは、リンクリストが誤って循環していると述べています。_wellFormed()メソッドは、クラスインストラクターによってすでに実装されているため、問題はありません。いくつかのポインタが必要です!ありがとう。これは、テストが誤って循環しているかどうかを確認するためのテストです。
// check for cycles:
Node<T> fast = _tail.next;
for (Node<T> p = _tail; fast != null && fast.next != null && fast != _tail && fast.next != _tail; p = p.next) {
if (p == fast) return _report("list is wrongly cyclic");
fast = fast.next.next;
}