我尝试为圆形链表实现插入方法。我想我取得了一些成功。
问题: 当我显示列表时。显示方法将循环,因为链接的每个下一个变量都链接到非空节点对象。所以head永远不会是一个空对象。根据我记得的单链表,head始终指向列表中的第一个节点或第一个包含数据的节点。
我对循环链表的概念性理解: 根据我的理解,循环链接有点像单链表,但有一点点扭曲:尾部对象的下一个变量指向头部。
我编码它就像源链接提供的图表一样。
来源:http://sourcecodemania.com/circular-linked-lists/
{ 'john smith' => 'jsmith@gmail.com', 'joe@gmail.com => 'joe@gmail.com' }
答案 0 :(得分:1)
一旦插入至少一个元素,就永远不会遇到null。它将一直持续到无限。
另外,修改head只是为了显示列表可能不是一个好主意。像显示器这样的操作不应该有任何副作用。
相反,在列表类中保留成员字段大小,并在每个插入和删除方法中更新它。
现在您将知道应该多少次迭代循环。
ListClassName current = head; // Head is not modified.
for (int i = 0; i < this.size; i++) {
// System.out.println (current.data);
current = current.next;
}
祝你好运。
答案 1 :(得分:1)
您可以保留对第一个Link对象的引用,并在循环时检查以确保head与该对象不相等:
public void display()
{
boolean first=true;
Link firstItem=null;
// good implementation for display #2
while(head != null && head!= firstItem)
{
if(first){
firstItem=head;
first=false;
}
// System.out.println (head.data);
head = head.next;
}
}