Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环链表节点插入Java_Java_Linked List - Fatal编程技术网

循环链表节点插入Java

循环链表节点插入Java,java,linked-list,Java,Linked List,我尝试为循环链表实现insert方法。我想我取得了一些成功 问题: 当我显示列表时。display方法将循环,因为链接的每个下一个变量都链接到一个非空节点对象。所以head永远不会是空对象。根据我对单链表的记忆,head总是指向列表中的第一个节点,或者指向其中包含数据的第一个节点 我对循环链表的概念性理解: 据我所知,循环链接有点像一个单链接列表,但有一点扭曲:tail对象的下一个变量指向head 我像源链接提供的图表一样对其进行编码 资料来源: 一旦插入至少一个元素,就永远不会遇到null。它

我尝试为循环链表实现insert方法。我想我取得了一些成功

问题: 当我显示列表时。display方法将循环,因为链接的每个下一个变量都链接到一个非空节点对象。所以head永远不会是空对象。根据我对单链表的记忆,head总是指向列表中的第一个节点,或者指向其中包含数据的第一个节点

我对循环链表的概念性理解: 据我所知,循环链接有点像一个单链接列表,但有一点扭曲:tail对象的下一个变量指向head

我像源链接提供的图表一样对其进行编码

资料来源:


一旦插入至少一个元素,就永远不会遇到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;
    }
}