初級演算法-連結串列
連結串列的刪除
連結串列的刪除就是指標的移動,將待刪除節點的指標移動到下一個節點
題1:刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。
雖然我們並不知道,這個節點的前一個節點時什麼,但是我們知道這個節點的下一個節點是什麼,
將當前要刪除的節點替換為下一個節點即可
public static void deleteNode(ListNode node) {
if(node == null || node.next == null){
return;
}
ListNode next = node.next;
node.val = next.val;
node.next = next.next;
}
連結串列的反轉
題:反轉一個單連結串列
連結串列的反轉不需要不需要建立新的物件,整個過程也就是指標的移動
1. 首先構建一個新的節點,將頭結點與原來節點分離,然後重複前一個動作,將第二個節點從原來的節點分離,並加上新的節點上
if(head == null || head.next == null) {
return head;
}
// 新的節點
ListNode pre = null;
ListNode next = null;
while (head != null) {
// 首先儲存待移動節點的下一個節點
next = head.next;
// 分離當前節點,並指向新的節點
head.next = pre;
// 挪動新節點的指標
pre = head;
// 挪動舊節點指標
head = next;
}
return pre;
連結串列的合併
題:兩個有序連結串列的合併
有序連結串列的合併,就是將另外一個連結串列的節點不斷插入另一個節點
if(l1 == null || l2 ==null) {
return l1 == null ? l2 : l1;
}
ListNode head = l1.val < l2.val ? l1 : l2;
ListNode cur1 = head == l1 ? l1 : l2;
ListNode cur2 = head == l1 ? l2 : l1;
ListNode pre = null ;
ListNode next = null;
while(!(cur1 == null || cur2 == null)) {
// 值比另外一個節點小,就直接遍歷下一個節點
if (cur1.val <= cur2.val) {
pre = cur1;
cur1 = cur1.next;
} else {
// 將cur2的節點插入到cur1中
next = cur2.next;
pre.next = cur2;
cur2.next = cur1;
pre = cur2;
cur2 = next;
}
}
pre.next = cur1 == null ? cur2 : cur1;
return head;
環形連結串列判斷
if (head == null || head.next == null || head.next.next == null) {
return false;
}
ListNode step1 = head;
ListNode step2 = head;
while (step2 != null && step2.next !=null) {
step1 = step1.next;
step2 = step2.next.next;
if (step1 == step2) {
return true;
}
}
return false;
相關文章
- 【LeetCode】初級演算法:連結串列LeetCode演算法
- [Golang]力扣LeetBook—初級演算法—連結串列—迴文連結串列(快慢指標)Golang力扣演算法指標
- 演算法-連結串列演算法
- 把玩演算法 | 連結串列演算法
- 結構與演算法(03):單向連結串列和雙向連結串列演算法
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 演算法面試(一) 連結串列演算法面試
- 力扣--連結串列演算法力扣演算法
- 筆記--連結串列演算法筆記演算法
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- 連結串列-雙向連結串列
- 連結串列-迴圈連結串列
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 【小白學演算法】5.連結串列(linked list)、連結串列的新增演算法
- 演算法題中的連結串列演算法
- 演算法 - 連結串列操作思想 && case演算法
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 資料結構與演算法-連結串列資料結構演算法
- golang二級指標操作連結串列Golang指標
- 【資料結構與演算法學習】線性表(順序表、單連結串列、雙向連結串列、迴圈連結串列)資料結構演算法
- 連結串列入門與插入連結串列
- (連結串列)連結串列的排序問題排序
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- 連結串列
- 玩轉演算法面試之連結串列演算法面試
- 演算法:排序連結串列:歸併排序演算法排序
- 【演算法詳解】有環連結串列演算法
- Swift 演算法實戰之路:連結串列Swift演算法
- 資料結構與演算法分析——連結串列資料結構演算法
- JavaScript資料結構與演算法(連結串列)JavaScript資料結構演算法
- 【Algorithm】連結串列演算法中啞結點作用Go演算法
- [ JavaScript ] 資料結構與演算法 —— 連結串列JavaScript資料結構演算法
- 資料結構與演算法-連結串列(下)資料結構演算法
- 資料結構與演算法-連結串列(上)資料結構演算法
- javascript資料結構與演算法--連結串列JavaScript資料結構演算法
- 演算法問題總結-連結串列相關演算法
- 演算法與資料結構-連結串列((linked-list)-Java實現單向連結串列演算法資料結構Java