鏈表
鏈表定義
n個節點離散分配,彼此通過指針相連,每個節點只有一個前驅節點,每個節點只有一個後續節點,首節點沒有前驅節點,尾節點沒有後續節點。
鏈表優點
- 插入刪除快
鏈表缺點
- 存取速度慢
Java 實現單鏈表
public class MyNode {
/**
* 鏈表保存的數據
*/
private int data;
/**
* 鏈表的下一個節點
*/
private MyNode next;
/**
* 構造函數
*
* @param data
*/
public MyNode(int data) {
this.data = data;
}
/**
* 添加節點
*
* @param myNode
*/
public MyNode append(MyNode myNode) {
// 取出當前節點
MyNode currentNode = this;
// 循環判斷是否爲最後一個節點
while (true) {
// 取出下一個節點
MyNode nextNode = currentNode.next;
// 如果爲空,說明爲最後一個節點
if (nextNode == null) {
break;
} else {
// 否則繼續尋找下一個節點
currentNode = nextNode;
}
}
// 最後一個節點的 next 賦值新添加的元素
currentNode.next = myNode;
return myNode;
}
/**
* 刪除下一個節點
*/
public void removeNext() {
// 記錄下下個節點的信息
MyNode nextNode = this.next.next;
// 刪除下一個節點
this.next = nextNode;
}
/**
* 顯示鏈表
*/
public void show() {
MyNode currentNode = this;
while (true) {
if (currentNode != null) {
System.out.print(currentNode.getData() + "\t");
currentNode = currentNode.next;
} else {
break;
}
}
System.out.println();
}
/**
* 插入一個節點
*
* @param myNode
*/
public void insert(MyNode myNode) {
// 記錄下一節點信息
MyNode nextNode = this.next;
// 下一個節點指向要添加的節點
this.next = myNode;
// 連接原來的節點
myNode.next = nextNode;
}
/**
* 獲取當前節點的數據
*
* @return
*/
public int getData() {
return this.data;
}
}