循环链表节点插入Java

Circular Linked List Node Insertion Java

我尝试为循环 linked 列表实现插入方法。我想我取得了一些成功。

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

我对循环 linked 列表的概念理解: 据我所知,循环 linked 有点像一个单独的 linked 列表,但略有不同:尾对象的下一个变量指向头部。

我正在按照来源 link 提供的图表进行编码。

来源: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。它将一直持续到无穷大。

此外,为了显示列表而修改 head 可能不是一个好主意。显示之类的操作应该不会有任何副作用。

相反,在您的列表中保留成员字段大小 class 并在每个插入和删除方法中更新它。

现在你就知道应该循环多少次了。

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;
    }
}