Java資料結構——迴圈連結串列的實現
阿新 • • 發佈:2019-01-11
一、描述
迴圈連結串列:表中的最後一個節點的指標域指向頭結點,整個連結串列形成一個環。
迴圈連結串列判空條件:有的說是判斷p或p->next是否等於頭指標,有的說判斷tail是否等於head,有的說判斷head是否為空,這其實要根據實際情況來判斷。若是不帶頭結點(這裡說帶頭結點是隻一個空的節點做為頭結點)迴圈連結串列,則可以用判斷head是否為空來判斷連結串列是否為空。若是帶頭結點,則可以根據判斷tail是否等於head來判斷迴圈連結串列是否為空。
迴圈連結串列的操作和線性連結串列基本一致,這裡就只是簡單地介紹一下。
帶頭結點的迴圈連結串列如下:
不帶頭結點的迴圈連結串列如下:
二、程式碼實現
2.1 CircleLinkList.java
package com.yds.list;
public class CircleLinkList<T>{
Node head,tail;
Node p;
int size = 0;
public CircleLinkList(){
this.head = null;
tail = head;
p = head;
}
public int length(){
return size;
}
/**
* 新增節點
* @param data
*/
public void add(T data){
Node node = new Node<T>(data);
if(head==null){
head = node;
tail = head;
p = head;
size++;
}
else{
node.next = head;
head = node;
tail.next = head;
p = head;
size++;
}
}
/**
* 得到資料
* @param index
* @return
*/
public T get(int index){
int i = 0;
p = head;
while(i!=index&&p!=tail){
i++;
p = p.next;
}
return (T) p.data;
}
/**
* 不帶頭結點的頭插法,所謂不帶頭結點是指不帶為空的頭結點。
* 所以判斷連結串列為空的條件不一樣
* @return
*/
public boolean isEmpty(){
if(head!=null)
return false;
else
return true;
}
}
2.2 JavaMain.java
package com.yds.list;
public class JavaMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
CircleLinkList<Integer>listA = new CircleLinkList<Integer>();
int[] la = {
1,3,2,5,4,8
};
System.out.println("迴圈連結串列是否為空?"+listA.isEmpty());
for (int i = 0; i < la.length; i++) {
listA.add(la[i]);
}
for (int i = 0; i < listA.length(); i++) {
System.out.println(listA.get(i));
}
System.out.println("迴圈連結串列長度:"+listA.length());
System.out.println("迴圈連結串列是否為空?"+listA.isEmpty());
}
}
三、結果截圖