我正在尝试将一个元素添加到循环单链接列表的末尾以供我的作业 分配。但由于某些原因,我遇到了很多问题。
我有_tail
指针和_dummy
。 JUnit测试中的add方法说,在检查add方法时,它返回null而不是1.(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();
}
这是我的添加方法
@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;
}
答案 0 :(得分:0)
_tail.next = n;
_tail = n;
您应该在添加方法的代码开头添加一行: -
n.next = _tail.next;
因此,您的代码变为: -
n.next = _tail.next;
_tail.next = n;
_tail = n;
您需要让新节点指向第一个节点,使其成为循环节点。
因为_tail.next
我假设必须指向第一个元素,然后才向List
添加新节点,因此在添加_tail.next
之前将n.next
指定给n
到列表中node
现在也指向第一个n
。
因此,在第一行,您的节点: - _tail
节点和_tail
节点指向第一个节点。现在,从第一个节点分离n
节点,并使其指向n
节点。最后,将_tail
节点设为{{1}}节点。