鏈表

鏈表通過指針將一組零散的內(nèi)存空間串聯(lián)起來使用。
單鏈表

鏈表.jpg

雙向鏈表
雙向鏈表.jpg

循環(huán)鏈表
循環(huán)鏈表.jpg

鏈表的特點

每一個內(nèi)存塊稱之為節(jié)點
為了將所有節(jié)點聯(lián)系起來 每個節(jié)點不僅要記錄數(shù)據(jù)還要記錄下一個內(nèi)存塊的地址
通常 第一個節(jié)點稱之為頭節(jié)點 最后一個節(jié)點稱之為尾結(jié)點

鏈表的相關(guān)操作

data:節(jié)點元素
next:后繼節(jié)點地址

下標(biāo)訪問:不支持
插入

q:插入的節(jié)點
p:當(dāng)前節(jié)點
只需p->next = q就可以了 時間復(fù)雜度為O(1)

刪除

k:刪除節(jié)點
單純的刪除操作只需將k節(jié)點刪除就可以了時間復(fù)雜度為O(1)
但刪除元素后要將指向k的指針也刪除 這就需要從頭遍歷了 時間復(fù)雜度為O(n)
這里有個小技巧 當(dāng)k不為尾結(jié)點時

k->data = k->next->data;
k->next = k->next->next;

然后刪除k->next 時間復(fù)雜度為 O(1)

查找

順序遍歷O(n)
將鏈表構(gòu)建為跳表 查找的時間復(fù)雜度為O(n)

LeetCode234 回文鏈表
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isPalindrome(ListNode head) {
        ListNode fast = head, slow = head;
        while (fast != null) {
            if (fast.next == null) {
                slow = slow.next;
                break;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        slow = reverse(slow);
        fast = head;
        while (slow != null) {
            if (slow.val != fast.val) {
                return false;
            }
            slow = slow.next;
            fast = fast.next;
        }
        return true;
    }

    private ListNode reverse(ListNode head) {
        if (head == null)
            return null;
        ListNode previous = null;
        ListNode next = null;

        while (head != null) {
            next = head.next;
            head.next = previous;
            previous = head;
            head = next;
        }

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

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

  • 搞懂單鏈表常見面試題 Hello 繼上次的 搞懂基本排序算法,這個一星期,我總結(jié)了,我所學(xué)習(xí)和思考的單鏈表基礎(chǔ)知識...
    醒著的碼者閱讀 4,732評論 1 45
  • 鏈表是離散存儲線性結(jié)構(gòu),物理地址上不要求連續(xù)。 鏈表優(yōu)點物理地址不需要連續(xù),插入刪除元素比較快 鏈表缺點查詢速度慢...
    阿貍404閱讀 1,486評論 0 0
  • ??終于開始提筆寫算法(2)了,我先為自己鼓個小手,然后決定,這一波寫個常見的數(shù)據(jù)結(jié)構(gòu),鏈表,還望各位小伙伴多多支...
    大王叫我來巡老和山閱讀 1,381評論 2 5
  • LeetCode-鏈表 鏈表(Linked List)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會按線性的順...
    raincoffee閱讀 1,335評論 0 6
  • 久違的晴天,家長會。 家長大會開好到教室時,離放學(xué)已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,819評論 16 22

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