我们知道双链表数据结构的优点是,如果您已经在要插入的位置之前或之后获得了节点,则可以在 O(1) 时间内插入节点。 (例如,如果你有一个双链表:A-B-C-D,如果你已经得到了节点C,那么在节点C之前或之后插入一个新节点只需要O(1)时间)。
如果你在Java/C++中手动构造一个双链表,那是相当容易理解的,但是我最近对Java中的LinkedList库感兴趣,它是java.util中提供的双链表数据结构。如果我想使用java提供的LinkedList库,我如何像我在第1段中提到的那样执行O(1)插入或删除?我做了一些研究,你可以创建一个LinkedList的ListIterator,它可以向前和向后遍历,然后插入和删除前一个或后一个节点。但还是需要遍历。如果我已经有了节点C,如何在O(1)时间内直接获取对应的Iterator?
最佳答案
LinkedList
类在遍历期间或在列表的开头/结尾处提供 O(1) 插入/删除时间。这并不意味着您可以在列表中间随机选取一个节点并在 O(1) 时间内将其删除或在其旁边插入某个节点。
关于java - Java中LinkedList的实时效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528087/