首先構造一個基礎的List 需要什麼條件 ? (思考)
長度 : length
索引 : index
元素 : x
第一 長度和索引的關係 max(index) = length -1
開始構造 :
public interface <T> LList {
// 獲取長度 的方法
public int size () ;
// 判斷空
public boolean is Empty () ;
//插入元素
public void insert ( int index , object x ) ;
//刪除元素
public void delete ( int dex );
// 查找元素
public Object get ( int dex );
}
下面就是這些方法的具體實現
一 . 單向循環鏈表
思考 :單向鏈表是個是什麼東西跟這個List 普通列表有什麼區別呢 ,畫個單向鏈表圖
實際的結構應該是這樣的 head --->> 對象 + 引用--->> 對象 + 引用--->> 對象 + 引用
實際上單鏈表的存儲是分散的,實際存放是根據每個Node 的next 指針查找下一個對象
開始實現單鏈表 (注意這裏是帶頭節點的插入操作)
思考 結構 :Node head = NULL ;
節點的值 data
next 爲下個節點的引用
public class LinkList {
Node head = NULL ; //頭結點爲空
/**
- 鏈表中的節點,data代表節點的值,next是指向下一個節點的引用
- @author Hibernate sir
*/
public class Node {
Node next = NULL ;
int data ;
public Node ( int data ){
this.data = data ;
}
}
//插入元素
public void addNode ( int x ) {
Node newnode = new Node (x) ; //實例化一個節點
if (head = = null ){ //鏈表表頭爲空,返回表頭
head = newnode ;
return ;
}
Node tmp = head;
while (tmp.next != null) {
tmp = tmp.next;
}
tmp.next = newNode;
}
//刪除元素
public boolean deleteNode( int index ){
if (index < 1 || index > length()) {
return false;
}
if (index == 1) {
head = head.next;
return true;
}
int i = 1;
Node preNode = head;
Node curNode = preNode.next;
while (curNode != null) {
if (i == index) {
preNode.next = curNode.next;
return true;
}
preNode = curNode;
curNode = curNode.next;
i++;
}
return false;
}
/**- @return 返回節點長度
*/
public int length() {
int length = 0;
Node tmp = head;
while (tmp != null) {
length++;
tmp = tmp.next;
}
return length;
}
}