單頁面營銷型網(wǎng)站制作網(wǎng)絡推廣方法有哪些
LinkedList 的數(shù)據(jù)結構
實現(xiàn)List、Deque 接口,基于 雙向鏈表實現(xiàn)的列表。與基于數(shù)組的 ArrayList 不同,基于鏈表的LinkedList 允許在列表的任何位置快速地插入和刪除元素。
Java中LinkedList實現(xiàn)了Deque,它提供了 add, offer, remove, poll, element, peek 等方法,因此可以視LinkedList為一個基于鏈表的 雙向隊列。
雙向鏈表的高效刪除、添加元素,相較低的查詢效率LinkedList也具備。



LinkedList 的每個元素都包含三個部分:
- 數(shù)據(jù)本身
- 指向前一個元素的引用(前驅)
- 指向后一個元素的引用(后繼)
這種雙向鏈接使得 LinkedList 可以很容易地向前或向后遍歷,并且可以在 O(1) 時間內(nèi)完成插入和刪除操作。
LinkedList方法
get(int index)方法

調(diào)用node(int index)方法遍歷鏈表返回指定index元素

add(E e)方法
使用add添加元素時,默認插入到尾部,所以不需要查找后更新|添加,實現(xiàn)復雜度是O(1)。
注意:LinkedList不需要擴容

由構造方法可以看出來,LinkedList是允許null值的,且null值數(shù)量不做限制

add(int index, E element)方法
找到原來的Index位置的元素,然后插入。 插入操作=創(chuàng)建一個新的節(jié)點+并將其連接到原index處節(jié)點前


remove()方法
這個方法是實現(xiàn)自Deque接口,具有隊列性質(zhì),移除first節(jié)點

remove(int index)
這個是List的實現(xiàn),遍歷找出指定index的節(jié)點后然后移除

remove(Object o)方法
注意, 方法只會移除LinkedList鏈表中第一個匹配對象,如果返回false表示沒有次對象。

LinkedList 的特點
- 插入和刪除操作快:由于雙向鏈表的特性,可以在 O(1) 時間內(nèi)完成插入和刪除。
- 不適合隨機訪問:相對于數(shù)組來說,鏈表的隨機訪問較慢,因為必須從頭開始遍歷鏈表直到找到所需的元素。
- 內(nèi)存消耗較大:每個元素除了存儲自身的數(shù)據(jù)外,還需要額外的空間來保存前后節(jié)點的引用,因此比數(shù)組占用更多的內(nèi)存。
- 允許空值
優(yōu)化點
remove(Object o)方法移除元素時,先進行空值 == null判斷,然后item比較時使用 == null判斷,這樣比equals高效
LinkedList 相關的面試題
下面列出了一些與 LinkedList 相關的常見面試題:
1.解釋什么是雙向鏈表,并描述其優(yōu)勢。
- 雙向鏈表是一種鏈表,其中每個節(jié)點包含對前一個節(jié)點和下一個節(jié)點的引用。這使得可以從前向后和從后向前遍歷列表,也簡化了插入和刪除操作。
- 在 LinkedList 中,插入操作只需要修改相關節(jié)點的前后指針即可,因此時間復雜度為 O(1)。
2.LinkedList 和 ArrayList 之間的區(qū)別是什么?
- LinkedList 使用鏈表實現(xiàn),適合頻繁的插入和刪除操作;ArrayList 使用數(shù)組實現(xiàn),適合隨機訪問元素。
3.為什么 LinkedList 的 get(int index) 方法的時間復雜度是 O(n)?
- 因為 LinkedList 需要從頭部或尾部開始遍歷到指定索引的位置,最壞情況下可能需要遍歷整個列表。
- LinkedList 提供了對 ListIterator 的支持,允許用戶在迭代過程中添加、刪除或修改元素。
4.如何檢測 LinkedList 中是否存在環(huán)?(理論上標準的LinkedList不會出現(xiàn)環(huán)形鏈表)
- 常見的方法是使用 Floyd's Cycle-Finding Algorithm 或者稱為龜兔賽跑算法,通過兩個不同速度的指針來檢測循環(huán)的存在。
5.如何反轉一個 LinkedList?
- 反轉 LinkedList 的一種方法是從頭節(jié)點開始,逐個交換每個節(jié)點的前后指針,直到到達最后一個節(jié)點。
推薦資料
https://www.hello-algo.com/