亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于鏈表的知識點有哪些

發布時間:2021-10-29 09:51:47 來源:億速云 閱讀:153 作者:iii 欄目:web開發

本篇內容介紹了“關于鏈表的知識點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一 單向鏈表

1.1  單向鏈表原理圖

單向鏈表的一個鏈結點包含數據域和下一個鏈結點的指針。頭結點也包含數據域和指針域,但是一般為了方便查找,頭節點不寫數據,最后一個結點的指針指向空。

關于鏈表的知識點有哪些

1.2 實現單向鏈表的存儲等操作

創建一個鏈結點的實體類

public class Node {      // 數據域     public long data;     // 指針域     public Node next;      public Node(long value){         this.data = value;     } }

1.2.1 插入一個節點

在頭節點后插入一個結點,第一步需要將新插入的結點指向頭結點指向的結點,第二步將頭結點指向新插入的結點。插入結點只需要改變一個引用,所以復雜度為O(1)。

關于鏈表的知識點有哪些

public class LinkList {      private Node head;     /**      * 在頭節點之后插入一個節點      */     public void insertFirst(long value){         Node node = new Node(value);         node.next = head;         head = node;     } }

1.2.2 頭結點后刪除一個結點

在頭結點后刪除一個結點,就是讓頭結點指向這個結點的下一個結點。復雜度也是O(1)。

關于鏈表的知識點有哪些

public Node deleteFirst(){     Node tmp = head;     head = tmp.next;     return tmp; }

1.2.3 根據數據域查找結點

查找需要比對每個結點的數據,理論上查找一個結點平均需要N/2次,所以復雜度為O(N)。

public Node find(long value){      Node current = head;     while (current.data != value){         if(current.next == null){             return null;         }         current = current.next;     }     return current; }

1.2.4 根據數據與刪除結點

查找需要比對每個結點的數據,理論上刪除一個結點平均需要N/2次,所以復雜度為O(N)。

public Node delete(int value){     Node current = head;     // 當前結點的前一個結點     Node pre = head;     while (current.data != value){         if(current.next == null){             return null;         }         pre = current;         current = current.next;     }     if(current == head){         head = head.next;     }else{         pre.next = current.next;     }     return current; }

二 雙端鏈表

2.1 雙端鏈表原理圖

雙端鏈表是在單向鏈表的基礎上,頭結點增加了一個尾結點的引用。

關于鏈表的知識點有哪些

2.2 實現雙端鏈表的存儲等操作

2.2.1 從頭部插入結點

如果鏈表為空,則設置尾結點就是新添加的結點。復雜度為O(1)。

public class FirstLastLinkList {      private Node first;     private Node last;     /**      * 在頭結點之后插入一個節點      */     public void insertFirst(long value){         Node node = new Node(value);         if(first == null){             last = node;         }         node.next = first;         first = node;     } }

2.2.2 從尾部插入結點

如果鏈表為空,則設置頭結點為新添加的結點,否則設置尾結點的后一個結點為新添加的結點。復雜度為O(1)。

public void insertLast(long value){     Node node = new Node(value);     if(first == null){         first = node;     }else{         last.next = node;     }     last = node; }

2.2.3 從頭部進行刪除

判斷頭結點是否有下一個結點,如果沒有則設置尾結點為null,復雜度為O(1)。

public Node deleteFirst(){      Node tmp = first;     if(first.next == null){         last = null;     }     first = tmp.next;     return tmp; }

三 雙向鏈表

3.1 雙向鏈表原理圖

每個結點除了保存對后一個結點的引用外,還保存著對前一個結點的引用。

關于鏈表的知識點有哪些

3.2 實現雙向鏈表的存儲等操作鏈結點實體類

public class Node {      // 數據域     public long data;     // 后一個結點指針域     public Node next;     // 前一個結點指針域     public Node prev;      public Node(long value){         this.data = value;     } }

3.2.1 從頭部插入結點

如果鏈表為空,則設置尾結點為新添加的結點,如果不為空,還需要設置頭結點的前一個結點為新添加的結點。插入結點只需要改變兩個結點的引用,所以復雜度為O(1)。

關于鏈表的知識點有哪些

public class DoubleLinkList {      private Node first;     private Node last;      /**      * 在頭結點之后插入一個節點      */     public void insertFirst(long value){         Node node = new Node(value);         if(first == null){             last = node;         } else{             first.prev = node;         }         node.next = first;         first = node;     } }

3.2.2 從尾部插入結點

如果鏈表為空,則設置頭結點為新添加的結點,否則設置尾結點的后一個結點為新添加的結點。同時設置新添加的結點的前一個結點為尾結點。插入結點只需要改變1個結點的引用,所以復雜度為O(1)。

public void insertLast(long value){     Node node = new Node(value);     if(first == null){         first = node;     }else{         last.next = node;         node.prev = last;     }     last = node; }

3.2.3 從頭部刪除結點

判斷頭結點是否有下一個結點,如果沒有則設置尾結點為null,否則設置頭結點的下一個結點的prev為null。復雜度也為O(1)。

關于鏈表的知識點有哪些

public Node deleteFirst(){      Node tmp = first;     if(first.next == null){         last = null;     }else{         first.next.prev = null;     }     first = tmp.next;     return tmp; }

3.2.4 從尾部刪除結點

如果頭結點后沒有其他結點,則設置頭結點為null,否則設置尾結點的前一個結點的next為null,設置尾結點為前一個結點。復雜度為O(1)。

public Node deleteLast(){      Node tmp = last;      if(first.next == null){         first = null;     }else{         last.prev.next = null;       }     last = last.prev;     return last; }

“關于鏈表的知識點有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

包头市| 兴宁市| 仪征市| 青田县| 镶黄旗| 浦北县| 札达县| 南召县| 长宁县| 广汉市| 会泽县| 丰台区| 铜川市| 榆中县| 宜川县| 荔浦县| 淮滨县| 东光县| 青河县| 上林县| 望江县| 祥云县| 宝丰县| 元江| 威海市| 包头市| 自治县| 闸北区| 涞水县| 遂昌县| 陆河县| 贵定县| 正定县| 巢湖市| 唐海县| 贵德县| 昌平区| 买车| 桓仁| 河北区| 北海市|