演算法 - 連結串列操作思想 && case
演算法 - 連結串列操作題目套路 前面這一篇文章主要講連結串列操作時候的實操解決方式,本文從本質講解連結串列操作的元資訊,學完後,再也不怕連結串列操作題目了。
1.連結串列的基本操作
連結串列的基本操作無外乎插入,刪除,遍歷
插入的化,要考慮到前驅節點和後繼節點,記住下面的虛擬碼
nex = 當前節點.next
當前節點.next = 插入的指標
插入指標.next = tmp
對於刪除,是否會覺得需要備份一下next的指標,答案是不用,執行語句是先取右邊的值存起來然後賦值給左邊的,所以直接下面一句話即可
cur.next = cur.next.next
對於遍歷,實際上是又迭代和遞迴的,另外又有前序和後序
cur = head
while cur != null {
print(cur)
cur = cur.next
}
//前序
dfs(cur) {
if cur == null return
print(cur.val)
return dfs(cur.next)
}
2.連結串列的考點
連結串列的考點就只有對指標的修改和對指標的拼接,其中都需要對指標的前驅節點和後繼節點進行保留,如果頭節點不能首次確定,或者可能會改變,那麼又需要一個虛擬頭節點,連結串列的考點無外乎就這些。
下面我們來看兩個題
刪除連結串列中的重複元素
public ListNode deleteDuplicates(ListNode head) {
//遞迴版
if (head == null || head.next == null)
return head;
if (head.val == head.next.val) {
while (head.next != null && head.next.val == head.val)
head = head.next;
head = deleteDuplicates(head.next);
} else {
head.next = deleteDuplicates(head.next);
}
return head;
}
判斷是否為迴文連結串列
public boolean isPalindrome(ListNode head) {
if(head == null || head.next == null)return true;
temp = head;
return dfs(head);
}
public boolean dfs(ListNode head){
if(head == null)return true;
boolean res = dfs(head.next) && temp.val == head.val;
temp = temp.next;
return res;
}
總結,連結串列的題目,掌握號指標的操作,就會簡單點了,對於遞迴寫法也會簡化很多程式碼
吳邪,小三爺,混跡於後臺,大資料,人工智慧領域的小菜鳥。
更多請關注
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2310/viewspace-2827034/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 演算法-連結串列演算法
- 【演算法】連結串列的基本操作和高頻演算法題演算法
- 把玩演算法 | 連結串列演算法
- 資料結構之連結串列篇(單連結串列的常見操作)資料結構
- 資料結構之連結串列操作資料結構
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 4-雙連結串列的操作
- 02-單連結串列的操作
- 結構與演算法(03):單向連結串列和雙向連結串列演算法
- 初級演算法-連結串列演算法
- 力扣--連結串列演算法力扣演算法
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- 【小白學演算法】5.連結串列(linked list)、連結串列的新增演算法
- 連結串列 - 單向連結串列
- 連結串列-迴圈連結串列
- 連結串列-雙向連結串列
- golang二級指標操作連結串列Golang指標
- 演算法面試(一) 連結串列演算法面試
- 【LeetCode】初級演算法:連結串列LeetCode演算法
- 演算法題中的連結串列演算法
- 資料結構與演算法-連結串列資料結構演算法
- 連結串列4: 迴圈連結串列
- 連結串列-雙向通用連結串列
- 連結串列-單連結串列實現
- 【資料結構與演算法學習】線性表(順序表、單連結串列、雙向連結串列、迴圈連結串列)資料結構演算法
- C++資料結構連結串列的基本操作C++資料結構
- 連結串列-雙向非通用連結串列
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 連結串列入門與插入連結串列
- Leetcode_86_分割連結串列_連結串列LeetCode
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- 連結串列還會用嗎?用連結串列實現棧(附演算法原始碼)演算法原始碼
- [Golang]力扣LeetBook—初級演算法—連結串列—迴文連結串列(快慢指標)Golang力扣演算法指標
- 演算法與資料結構-連結串列((linked-list)-Java實現單向連結串列演算法資料結構Java
- 資料結構與演算法-連結串列(上)資料結構演算法
- JavaScript資料結構與演算法(連結串列)JavaScript資料結構演算法
- 資料結構與演算法分析——連結串列資料結構演算法
- 【Algorithm】連結串列演算法中啞結點作用Go演算法