數據結構學習:鏈表

鏈表

鏈表是N個數據元素的有限序列,最經常使用的是鏈式表達,也叫線性鏈表或鏈表
鏈表中存儲的數據元素也叫節點,一個節點存儲的就是一條記錄
每一個結點的結構包括數據域、指針域兩部分算法

鏈表拓展

  • 單向鏈表 只能經過上一結點的指針找到下一個結點
  • 循環鏈表 讓單向鏈表最後一個元素的指針指向第一個元素
  • 雙向鏈 除了有指向下一個結點的指針外,再增長一個指向上一個結點的指針
  • 雙向循環鏈表 同時具有循環鏈表和雙向鏈表融合的特徵

使用場景

一:操做系統內的動態內存分配
二:LRU緩存淘汰算法緩存

經常使用操做

// 1.鏈表插入
s.next = p.next
p.next = s

// 2.鏈表刪除
p.next = p.next.next

// 3.鏈表反轉
while(curr){
    next = curr.next
    curr.next = prev
    prev = curr
    curr = next
}
// 4  快慢指針
// 4.1 奇數個元素鏈表,快慢指針查詢中間結點
while(fast && fast.next && fast.next.next){
    fast = fast.next.next;
    slow = slow.next;
}
// 4.2 快慢指還能夠用來判斷鏈表是否有環,若是鏈表存在環,快指針和慢指針必定會在環內相遇,即 fast == slow 的狀況必定會發生

// 5. 虛擬頭:鏈表頭可能發生改變時可以使用

leetcode

  • 141 環形鏈表
  • 142 環形鏈表Ⅱ
  • 202 快樂數
  • 206 鏈表反轉
  • 91 鏈表反轉Ⅱ
  • 25 K 個一組翻轉鏈表
  • 61 旋轉鏈表
  • 24 兩兩交換鏈表中的節點
  • 83 刪除排序鏈表中的重複節點
  • 82 刪除排序鏈表種的重複元素Ⅱ
  • 86 分隔鏈表
  • 138 複製帶隨機指針的鏈表
相關文章
相關標籤/搜索