循环链表节点插入Java
我尝试为循环链表实现insert方法。我想我取得了一些成功 问题: 当我显示列表时。display方法将循环,因为链接的每个下一个变量都链接到一个非空节点对象。所以head永远不会是空对象。根据我对单链表的记忆,head总是指向列表中的第一个节点,或者指向其中包含数据的第一个节点 我对循环链表的概念性理解: 据我所知,循环链接有点像一个单链接列表,但有一点扭曲:tail对象的下一个变量指向head 我像源链接提供的图表一样对其进行编码 资料来源:循环链表节点插入Java,java,linked-list,Java,Linked List,我尝试为循环链表实现insert方法。我想我取得了一些成功 问题: 当我显示列表时。display方法将循环,因为链接的每个下一个变量都链接到一个非空节点对象。所以head永远不会是空对象。根据我对单链表的记忆,head总是指向列表中的第一个节点,或者指向其中包含数据的第一个节点 我对循环链表的概念性理解: 据我所知,循环链接有点像一个单链接列表,但有一点扭曲:tail对象的下一个变量指向head 我像源链接提供的图表一样对其进行编码 资料来源: 一旦插入至少一个元素,就永远不会遇到null。它
一旦插入至少一个元素,就永远不会遇到null。它将一直持续到无穷远 另外,仅仅为了显示列表而修改head可能不是一个好主意。像显示器这样的操作不应有任何副作用 相反,在list类中保留一个成员字段大小,并在每个insert和delete方法中更新它 现在您就知道应该迭代循环多少次了
ListClassName current = head; // Head is not modified.
for (int i = 0; i < this.size; i++) {
// System.out.println (current.data);
current = current.next;
}
ListClassName current=head;//头部未修改。
for(int i=0;i
祝您好运。您可以保留对第一个链接对象的引用,并在循环时检查以确保头部不等于此对象:
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;
}
}
这是一个很好的主意,可以避免存储大小,但它会限制列表不能再存储重复的元素。在这种情况下,“head!=firstItem”正在基于对象引用测试相等性,因此只有当它是完全相同的对象时,这才可能是错误的。是的。你是对的。此方法不允许我们在列表中插入完全相同的对象两次。我认为您可能遗漏了某些内容。当一个节点(在本例中为链接对象)出现两次时,任何链接列表只能出现一次,并且当发生这种情况时,它会变成圆形。我认为您将列表中的元素(“本例中的数据”)与链接对象混淆了。即使我们两次插入相同的“数据”元素,也会使用两个不同的链接对象。很高兴知道这有帮助。
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;
}
}