【问题标题】:Circular Linked List Node Insertion Java循环链表节点插入Java
【发布时间】:2023-03-24 16:47:01
【问题描述】:

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

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

【问题讨论】:

    标签: java linked-list


    【解决方案1】:

    一旦插入至少一个元素,就永远不会遇到 null。它会一直持续到无穷大。

    另外,仅仅为了显示列表而修改 head 可能不是一个好主意。像显示这样的操作应该没有任何副作用。

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

    现在您将知道应该迭代循环多少次。

    ListClassName current = head;    // Head is not modified.
    for (int i = 0; i < this.size; i++) {
    //   System.out.println (current.data);
         current = current.next;
    }
    

    祝你好运。

    【讨论】:

    • 很高兴知道它有帮助。
    【解决方案2】:

    您可以保留对第一个 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;
        }
    }
    

    【讨论】:

    • 这是个不错的主意,让我们免于存储大小,但它会限制列表不再能够存储重复的元素。
    • 在这种情况下:"head != firstItem" 是基于对象引用测试相等性,所以如果它是完全相同的对象,这只能是错误的。
    • 是的。你说的对。此方法不允许我们在列表中插入完全相同的对象两次。
    • 我想你可能错过了一些东西。任何链表只能有一次节点(在这种情况下为链接对象)可以出现两次,并且当这种情况发生时它会变成循环。我认为您将列表中的元素(在本例中为“数据”)与 Link 对象混淆了。即使我们两次插入相同的“数据”元素,也会使用 2 个不同的 Link 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2013-02-06
    相关资源
    最近更新 更多