如果链表变大,访问链表中的节点可能会变得非常慢。我确实想到了一种加快访问速度的方法:有一个数组(也是一个LL),每100个节点有一个快捷键。这样,如果我想获得第205个元素,程序将不得不通过这个"路径":short cut to [100] -> short cut to [200] -> [201] -> ... -> [205]
。这比遍历整个l到第205个元素要快得多——5步,而不是204步。是的,如果我想要第n百和99个元素,它会变慢,但是程序会跳过LL的大部分来到达那里——从长远来看更快。
但是这些快捷方式需要在添加和删除更多元素后重新调整。删除并不是一个真正的问题——删除一个元素并设置指向下一个节点的某些捷径——这些捷径指向正式的第n个节点。添加更多数据是一个问题——在添加新元素时,必须将某些节点设置为指向以前的节点。为了得到这些元素,程序必须遍历整个列表,从最后一个仍然指向第n个元素的快捷方式开始。除非节点也指向前面的元素,否则整个过程就会像从向量中删除一个元素一样慢。
是否有一种方法可以加快访问速度,保持添加和删除元素的过程相当快?这只是一个好奇的问题,而不是在实际程序中使用它是否是个好主意。
您使用了错误的数据结构。链表最好用于顺序访问的列表,而不是随机访问的集合。为此,您最好使用某种类型的哈希表