繁体   English   中英

循环双链表Java-说明

[英]Circular Doubly Linked List Java - Explanation

目前,我正在编写一个循环双链表,并且我的任务已完成,但是在理解代码100%时我有一个小问题。

这是代码:

if (counter == 0) {
        startpoint = newNode;
        startpoint.next = startpoint;
        startpoint.prev = startpoint;
        head = startpoint;
        currentNode = newNode;

    } else {
        newNode.prev = startpoint.prev;
        newNode.next = startpoint;
        startpoint.prev.next = newNode; <- this is, where I have problems
        startpoint.prev = newNode;
        head = startpoint;
        currentNode = newNode;
    }
    counter++;
}

第一部分是完全清楚的,仅描述了当调用下一个或第一个方法时,第一个节点(如果没有其他节点)将指向自己。 在else语句之后,第一行描述第一个节点可以指向第二个节点,第二个节点可以指向前一个节点,对吗? 后面的第二行仅描述了最后一个节点指向第一个节点。 第四行描述的是,如果调用了prev方法,则第一个节点指向最后一个节点,因此圆是闭合的。 但是第三行到底描述了什么? 该代码绝对有效。

感谢您的时间!

向多米尼克致意

您的清单是循环的。

startpoint.prevstartpoint.prev之前的元素,因此它是列表的最后一个元素。

让我们举个例子,这是您的列表: A>B>C ,您尝试添加D

这行代码: startpoint.prev.next = newNode; 会将当前的最后一个元素( CA.prev == C )链接到新元素。 C.next = D

这行startpoint.prev = newNode; 将新元素设置为列表的最后一个元素( A.prev = D )。

该代码在startpoint之前插入newNode else语句的第三行仅更新起点之前的节点,以便其next字段引用新节点。

为了更加清楚,可以像这样重写该行:

    Node nodeBeforeStarpoint = startpoint.prev;
    nodeBeforeStartpoint.next = newNode; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM