摘要:實現的功能如下創建鏈表添加節點默認添加和指定位置添加訪問某一個節點刪除節點獲得鏈表的長度大小判斷鏈表是否為空自定義鏈表的打印格式清空鏈表注意要弄清楚節點的前赴和后繼,刪除時要注意賦值的順序定義鏈表中節點的類值前驅后繼定義雙向鏈表,實現功能如
實現的功能如下:
1)創建鏈表
2)添加節點(默認添加和指定位置添加)
3)訪問某一個節點
4)刪除節點
5)獲得鏈表的長度大小
6)判斷鏈表是否為空
7)自定義鏈表的打印格式
8)清空鏈表
*注意:要弄清楚節點的前赴 和 后繼,刪除時要注意賦值的順序!!!
定義 鏈表中 節點的類Node
public class Node { /** * 值 * */ Object value; /** * 前驅 */ Node pre; /** * 后繼 */ Node next; public Node(){ } public Node(Object value, Node pre, Node next) { this.value = value; this.pre = pre; this.next = next; } }
定義雙向鏈表LinkList,實現功能如下:
/** * 雙向鏈表 * * @author min * */ public class LinkList { /** * 頭結點 */ private Node head; /** * 尾結點 */ private Node tail; private int size; public LinkList() { head = new Node(); tail = new Node(); head.next = tail; tail.pre = head; size = 0; } public int size() { return size; } public boolean isEmpty() { return size==0; } public void clear() { head.next = tail; tail.pre = head; size = 0; } /** * 在末尾添加新的數據 * * @param value 數據 */ public void add(Object value) { Node node = new Node(value,tail.pre,tail); tail.pre.next = node; tail.pre = node; size ++; } /** * 在特地位置創建新的節點 * @param index * @param value */ public void add(int index, Object value) { checkLinkList(index); if(index == size -1) { //插在最后一位 add(value); } else{ Node x = node(index-1); Node y = node(index); Node node = new Node(value, x, y); x.next = node; y.pre = node; size ++; } } /** * 獲取特定位置的節點 * @param index * @return 節點存儲的值 */ public Object get(int index) { //檢查是否在鏈表內 checkLinkList(index); //節點的值 return node(index).value; } /** * 刪除特定的節點 * @param index * @return 被刪除的節點 */ public Node remove(int index) { checkLinkList(index); Node x = node(index); x.pre.next = x.next; x.next.pre = x.pre; size --; return x; } /** * 檢查索引是否在鏈表內 * * @param index */ private void checkLinkList(int index) { if(index > size() ||index < 0) throw new ArrayIndexOutOfBoundsException(index); } /** * 遍歷鏈表查詢特定的節點 * * @param index 索引 * @return 指定的節點 */ private Node node(int index) { //第1個節點 Node firstNode = head; //最后1個節點 Node lastNode = tail; //從頭開始遍歷 if(index <=(size>>1) ) { Node indexNode = firstNode; for(int i = -1; i < index; i++) indexNode = indexNode.next; return indexNode; } //從尾遍歷 else{ Node indexNode = lastNode; for(int i = size; i>index; i--) { indexNode = indexNode.pre; } return indexNode; } } /** * 重寫鏈表輸出方式 * */ @Override public String toString() { StringBuilder builder = new StringBuilder(); String str = ""; for(int i = 0; i測試
只實現了一些常用功能,自己寫的和工具包中的類對比,會從中get到很多。受益多多~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73486.html
摘要:經常和一起被提及。本文分析的具體實現。其中是雙端隊列接口,所以可以當作是棧隊列或者雙端隊隊列。注意最后一個方法,這個方法是在指定的位置插入元素。首先判斷位置是否越界,然后判斷是不是最后一個位置。 簡介 LinkedList是一個常用的集合類,用于順序存儲元素。LinkedList經常和ArrayList一起被提及。大部分人應該都知道ArrayList內部采用數組保存元素,適合用于隨機訪...
摘要:集合中成員很豐富,常用的集合有,,等。實現接口的集合主要有。集合中不能包含重復的元素,每個元素必須是唯一的。而以作為實現的構造函數的訪問權限是默認訪問權限,即包內訪問權限。與接口不同,它是由一系列鍵值對組成的集合,提供了到的映射。 原文地址 Java集合 Java集合框架:是一種工具類,就像是一個容器可以存儲任意數量的具有共同屬性的對象。 Java集合中成員很豐富,常用的集合有Arra...
摘要:注意排版不需要花花綠綠的,盡量使用語法。協議的長連接和短連接,實質上是協議的長連接和短連接。長連接短連接究竟是什么三次握手和四次揮手面試常客為了準確無誤地把數據送達目標處,協議采用了三次握手策略。 一 簡歷該如何寫 1.1 為什么說簡歷很重要?1.2-這3點你必須知道1.3-兩大法則了解一1.4-項目經歷怎么寫?1.5-專業技能該怎么寫?1.6-開源程序員簡歷模板分享1.7 其他的一些...
閱讀 1309·2021-11-04 16:09
閱讀 3509·2021-10-19 11:45
閱讀 2404·2021-10-11 10:59
閱讀 1019·2021-09-23 11:21
閱讀 2770·2021-09-22 10:54
閱讀 1146·2019-08-30 15:53
閱讀 2612·2019-08-30 15:53
閱讀 3484·2019-08-30 12:57