java版Spring Cloud+SpringBoot+mybatis+uniapp微服務架構之 java 雙向連結串列實現
雙向連結串列實現
雙向連結串列也叫雙連結串列,是連結串列的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向連結串列中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。
注意:在操作雙向連結串列時,不要去移動指向前驅節點和後繼節點的指標,而是重新定義指向頭尾的指標進行移動。
需要框架原始碼的朋友可以看我個人簡介聯絡我。
環境
IDEA
自定義操作介面
雙向連結串列。
public interface MyList<E> {
void add(E node);
E get(int index);
E remove(int index);
int size();
}
實現類
public class MyDoublyLinkList<E> implements MyList<E> {
/**
* 定義雙向連結串列節點
*/
class Node<E> {
Node<E> prev;
E item;
Node<E> next;
public Node(Node<E> prev, E item, Node<E> next) {
this.prev = prev;
this.item = item;
this.next = next;
}
}
private Node<E> head;
private Node<E> tail;
private int size;
/**
* 將節點新增到尾部
*
* @param item
* @return
*/
@Override
public void add(E item) {
this.linkLast(item);
}
/**
* 新增一個元素到尾部
*
* @param e
*/
private void linkLast(E e) {
//獲取tail
Node<E> node = this.tail;
//建立一個node
Node<E> newNode = new Node<>(node, e, null);
this.tail = newNode;
if (node == null)
this.head = newNode;
else
node.next = newNode;
size++;
}
/**
* 獲取指定位置元素
* @param index
* @return
*/
@Override
public E get(int index) {
//校驗index是否合法
checkIndex(index);
//獲取index元素
return getNode(index).item;
}
/**
* 校驗index合法性
*
* @param index
*/
private void checkIndex(int index) {
if (!(index >= 0 && index < this.size))
throw new IndexOutOfBoundsException(String.format("index out of bounds,index:%s,size:%s", index, this.size));
}
/**
* 獲取node
*
* @param index
* @return
*/
private Node<E> getNode(int index) {
if (index > (size >> 1)) {
Node<E> node = this.tail;
//從tail向前遍歷
for (int i = size - 1; i > index; i--) {
node = node.prev;
}
return node;
} else {
//從head向後遍歷
Node<E> node = this.head;
for (int i = 0; i < index; i++) {
node = node.next;
}
return node;
}
}
/**
* 刪除指定位置元素
*
* @param index
* @return
*/
@Override
public E remove(int index) {
//判斷index合法性
this.checkIndex(index);
Node<E> node = getNode(index);
E e = node.item;
//判斷是否為頭節點
if (node.prev == null) {
this.head = node.next;
} else {
node.prev.next = node.next;
node.prev = null;
}
//判斷是否為尾節點
if (node.next == null) {
this.tail = node.next;
} else {
node.next.prev = node.prev;
node.next = null;
}
node.item = null;
size--;
return e;
}
/**
* 獲取連結串列長度
*
* @return
*/
@Override
public int size() {
return this.size;
}
}
測試方法
public static void main(String[] args) {
MyList<String> stringMyList = new MyDoublyLinkList<>();
System.out.println(stringMyList.size());
stringMyList.add("a");
stringMyList.add("b");
stringMyList.add("c");
stringMyList.add("d");
System.out.println(stringMyList.size());
String re = stringMyList.remove(1);
System.out.println(re);
for (int i = 0; i < stringMyList.size(); i++) {
System.out.println(stringMyList.get(i));
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2844244/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java實現雙向連結串列Java
- Java雙向連結串列的實現Java
- JAVA基礎:語言中連結串列和雙向連結串列的實現(轉)Java
- 實現雙向連結串列
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- python 資料結構之雙向連結串列的實現Python資料結構
- 資料結構(雙向連結串列的實現)資料結構
- 資料結構之雙向連結串列資料結構
- Go實現雙向連結串列Go
- 資料結構-雙向連結串列(Python實現)資料結構Python
- Java學習筆記:資料結構之線性表(雙向連結串列)Java筆記資料結構
- javascript中的連結串列結構—雙向連結串列JavaScript
- 連結串列-雙向連結串列
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- Java版-資料結構-連結串列Java資料結構
- 資料結構——雙向連結串列資料結構
- 資料結構:雙向連結串列資料結構
- C++實現通用雙向連結串列C++
- 雙向連結串列的功能實現(初版
- 畫江湖之資料結構【第一話:連結串列】雙向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 雙向連結串列資料結構
- 資料結構之php實現單向連結串列資料結構PHP
- 演算法與資料結構-連結串列((linked-list)-Java實現單向連結串列演算法資料結構Java
- JAVA資料結構之連結串列Java資料結構
- 雙向連結串列
- 二十九、java版 SpringCloud分散式微服務雲架構之Java 資料結構JavaSpringGCCloud分散式微服務架構資料結構
- Java實現單向連結串列基本功能Java
- DoublyLinkedList(雙向連結串列)——Javascript版JavaScript
- 結構與演算法(03):單向連結串列和雙向連結串列演算法
- Java開發微服務實現分散式架構應用總結Java微服務分散式架構
- 三十三、java版 SpringCloud分散式微服務雲架構之Java HashSetJavaSpringGCCloud分散式微服務架構
- java版 SpringCloud分散式微服務雲架構之Java Iterator(迭代器)JavaSpringGCCloud分散式微服務架構
- MYSQL INNODB 中通用雙向連結串列的實現MySql
- java實現連結串列反轉Java
- Linux 核心資料結構:雙向連結串列Linux資料結構
- Java實現連結串列帶註釋Java
- 三十四、java版 SpringCloud分散式微服務雲架構之Java Iterator(迭代器)JavaSpringGCCloud分散式微服務架構
- 二十四、java版 SpringCloud分散式微服務雲架構之 Java 抽象類JavaSpringGCCloud分散式微服務架構抽象