我尝试实现循环链表的插入方法。我想我取得了一些成功。
问题:当我显示列表时。显示方法将循环,因为链接的每个下一个变量都链接到非空节点对象。所以头永远不会是一个空对象。根据我对单向链表的回忆,head 总是指向列表中的第一个节点或其中包含数据的第一个节点。
我对循环链表的概念理解:据我所知,循环链接有点像单链表,但略有扭曲:尾部对象的下一个变量指向头部。
我正在编码它,就像源链接提供的图表一样。
来源: http://sourcecodemania.com/circular-linked-lists/
public void insert(String data)
{
Link link = new Link(data);
if(head == null)
{
head = link;
tail= link;
}
else
{
tail.next = link;
tail = link;
tail.next = head;
}
}
public void display()
{
// good implementation for display #2
while(head != null)
{
// System.out.println (head.data);
head = head.next;
}
}
一旦你插入了至少一个元素,你就永远不会遇到 null。它会一直持续到无穷大。
此外,仅为了显示列表而修改头部可能不是一个好主意。像显示器这样的操作不应该有任何副作用。
相反,在列表类中保留成员字段大小,并在每个插入和删除方法中更新它。
现在您将知道应该迭代循环多少次。
ListClassName current = head; // Head is not modified.
for (int i = 0; i < this.size; i++) {
// System.out.println (current.data);
current = current.next;
}
祝你好运。
您可以保留对第一个 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;
}
}