循环链表节点插入 Java



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

问题:当我显示列表时。显示方法将循环,因为链接的每个下一个变量都链接到非空节点对象。所以头永远不会是一个空对象。根据我对单向链表的回忆,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;
    }
}

最新更新