單連結串列

╭似天涯╯發表於2020-12-30

定義

  • 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。

資料結構

public class ListNode {
  int val;
  ListNode next;
  ListNode() {}
  ListNode(int val) { this.val = val; }
  ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

 

瞭解連結串列從以下常規操作入手

  • 插入操作

  A連結串列插入:before

           

     A連結串列插入:after

    

     分析(個人理解):不管插入在連結串列的頭、中間、尾,它的複雜度都是O(1),只需要改變指標的指向。找到插入前的節點,接著next(指標指向)到插入的node節點,然後插入的node節點的next指向下一個node節點。如下虛擬碼:   

// 插入前
ListNode head;// node1就是head節點
ListNode node2;
ListNode node3 = head.next;

// 插入後
head.next = node2; // 指標head(node1)指向node2
node2.next = node3;// 指標node2指向node3
  • 查詢操作

  B連結串列查詢:

       

    分析(個人理解):連結串列的查詢需要迴圈,它的複雜度是O(n)。比如查詢元素的val值,如下虛擬碼:

ListNode head;
while(head != null){
  int data= head.val;// 獲取node中的元素;
  head = head.next;// 下一個node節點
}
  • 刪除操作

     操作前:給大家引入dummy節點(哨兵節點),可以理解dummy節點就是一個虛擬的節點,放在連結串列的前面,指標指向頭節點。

    

ListNode dummy = new ListNode(-1);// 建立dummy節點
dummy.next = head; // dummy節點指標 指向頭節點
.......
return dummy.next; // dummy.next返回還是連結串列m

     C連結串列刪除:

    1、刪除頭節點 

     

     分析(個人理解):連結串列刪除頭節點只需要操作一次就可以,它的複雜度是O(1),如下虛擬碼:

// 刪除前
ListNode head;(頭節點我們是知道的)
ListNode dummy = new ListNode(-1);// 建立dummy節點
dummy.next = head; // dummy的指向頭節點
ListNode next = head.next;// head的下一個node節點

// 刪除後
head.next = null;// 頭節點不再指向其他node節點
dummy.next = next;// dummy節點指向head節點的下一個節點,此時已完成刪除了head節點
return dummy.next; 

       2、刪除任意節點

    分析(個人理解):刪除任意的節點,它的複雜度是O(n),如下虛擬碼:

// 假如連結串列的長度是n,刪除第 m 的node節點,m < n;
ListNode head;//(頭節點我們是知道的)
ListNode dummy = new ListNode(-1);// 建立dummy節點
dummy.next = head; // dummy的指向頭節點
head = dummy; // 將dummy定義頭節點

for(int i = 1; i < m; i++){
    head = head.next;// 為了得到m的前節點;
}
ListNode nodem = head.next;// 得到第 m 的node節點
ListNode lastm = nodem.next;// 得到 m 的下一個node節點
nodem.next = null; // m 的node節點指標指向null
head.next = lastm; // m 的前節點指向 m 的下一個節點
return dummy.next; // 返回連結串列

總結

1、以上是我自己對連結串列的理解,寫的可能比較囉嗦,如有不解或者錯誤希望指正。

2、陣列的結構以及插入、刪除、查詢都比較簡單我就不寫了。

2、大家也多去了解下資料結構,多去leetCode去刷題。

 

 

相關文章