數(shù)據(jù)結構--鏈表

面試C++??嫉膯栴}:鏈表和數(shù)組有什么區(qū)別呢?

1、鏈表是鏈式存儲結構,數(shù)組是順序存儲結構。
2、鏈表通過指針連接元素與元素,而數(shù)組則是把所有元素按順序進行存儲。(就是說鏈表在內(nèi)存可以不連續(xù),數(shù)組則是連續(xù)存儲的。)
3、鏈表的插入和刪除元素比較簡單,不需要移動元素,且較為容易實現(xiàn)長度的擴充,但是查詢元素比較困難,數(shù)組是查詢比較快,但是刪除和增加會比較麻煩。(數(shù)組插入或刪除元素的時間復雜度O(n),鏈表的時間復雜度O(1)。)
4、數(shù)組在使用前需要固定大小,如果太小,會導致數(shù)組越界;如果太大,會造成內(nèi)存資源浪費;而鏈表則能夠動態(tài)分配內(nèi)存,實現(xiàn)用多少申請多少
5、數(shù)組元素在棧區(qū),鏈表元素在堆區(qū);
6、數(shù)組使用完后系統(tǒng)自動釋放空間,鏈表使用完后需要人為通過free釋放空間;
7、數(shù)組利用下標定位,時間復雜度為O(1),鏈表定位元素時間復雜度O(n)(數(shù)組定位元素時可以根據(jù)下標直接定位,而鏈表則需要遍歷,因此在定位元素時,數(shù)組優(yōu)于鏈表)

所以。。。。什么是鏈表呢?直接上栗子??!

單向鏈表

單向鏈表中包含數(shù)據(jù)域和指針域,其中數(shù)據(jù)域用于存放數(shù)據(jù),指針域用來連接當前結點和下一節(jié)點。

struct Node {
  int value;
  Node *next;
};

雙向鏈表

雙向鏈表中同樣有數(shù)據(jù)域和指針域,不同之處在于指針域有左右(或上一個、下一個)之分,用來連接上一個節(jié)點、當前結點、下一個結點。

struct Node {
  int value;
  Node *left;
  Node *right;
};

一個簡單的應用就是反轉鏈表:

輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

假設鏈表為 1→2→3→?,我們想要把它改?←1←2←3。

在遍歷鏈表時,將當前節(jié)點的 next 指針改為指向前一個節(jié)點。由于節(jié)點沒有引用其前一個節(jié)點,因此必須事先存儲其前一個節(jié)點。在更改引用之前,還需要存儲后一個節(jié)點。最后返回新的頭引用。

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* prev = nullptr;
        ListNode* curr = head;
        while (curr) {
            ListNode* next = curr->next;
            curr->next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }
};

[參考鏈接]
https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/solution/fan-zhuan-lian-biao-by-leetcode-solution-jvs5/
https://www.html.cn/qa/other/21664.html
https://blog.csdn.net/weixin_30636089/article/details/97230131
https://oi-wiki.org/ds/monotonous-stack/

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 點贊關注,不再迷路,你的支持對我意義重大!?? Hi,我是丑丑。本文「數(shù)據(jù)結構 & 算法」| 導讀 —— 登高博見[...
    彭旭銳閱讀 989評論 0 6
  • 一、基本概念 鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結構,數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序實現(xiàn)的...
    王小鵬的隨筆閱讀 618評論 0 1
  • 動態(tài)數(shù)組存在明顯的缺點:首先動態(tài)擴容可能會造成內(nèi)存空間的大量浪費;使用鏈表這種數(shù)據(jù)結構就可以辦到,使用多少內(nèi)存,就...
    YanZi_33閱讀 335評論 0 0
  • ??鏈表和數(shù)組一樣,都是用于儲存一系列的元素(數(shù)據(jù))的數(shù)據(jù)結構,但是鏈表和數(shù)組的實現(xiàn)機制完全不同,下面我們就來學習...
    涼尋閱讀 400評論 0 0
  • 0. 序列 之前有一篇文章講解了“動態(tài)數(shù)組”,以及通過這個“動態(tài)數(shù)組”實現(xiàn)了棧和隊列,而這里的“動態(tài)數(shù)組”的底層其...
    付凱強閱讀 1,016評論 5 7

友情鏈接更多精彩內(nèi)容