java實現循環鏈表:http://www.cnblogs.com/lixiaolun/p/4643911.html
在單鏈表中,查詢下一個元素的時間是O(1)。查詢上一個元素的時間卻是O(n)。
為了克服這種缺點,我們開始學習雙向鏈表。
雙向鏈表類的代碼:
package doublelinkedlist;
public class DoubleLinkedList {
class Element
{
private Element prior=null;
public Object value=null;
private Element next=null;
}
private Element header = null;//頭結點
/**
* 初始化鏈表
* */
void initList()
{
header = new Element();
header.prior=header;
header.value=null;
header.next=header;
}
/**
* 向鏈表中第i個位置插入元素o
* */
void insertList(Object o,int i)
{
if(i<=0||i>size())
{
System.out.println("插入位置不合法!鏈表長度為:"+size());
}else
{
Element e = new Element();
e.value=o;
if(header.prior==header)//第一次插入元素
{
e.prior=header;
e.next=header;
header.next=e;
header.prior=e;
}else if(i==size())//在最后插入
{
System.out.println("在鏈表尾部插入");
e.next=header;
e.prior=header.prior;
header.prior.next=e;
header.prior=e;
}else
{
Element temp = header;
int count=0;
while(temp.next!=header)
{
count++;
if(count == i)
{
e.prior=temp;
e.next=temp.next;
temp.next.prior=e;
temp.next=e;
}
temp=temp.next;
}
}
}
}
/**
* 刪除鏈表中的某個元素
* */
void deleteList(int i)
{
if(i<=0||i>size())
{
System.out.println("插入位置不合法!鏈表長度為:"+size());
}else
{
int count=0;
Element temp = header;
while(temp.next!=header)
{
temp=temp.next;
count++;
if(i==count)
{
//刪除第i個元素
temp.next.prior=temp.prior;
temp.prior.next=temp.next;
}
}
}
}
/**
* 打印鏈表
* */
void print()
{
System.out.print("打印雙向循環鏈表:");
Element temp = header;
while(temp.next!=header)
{
System.out.print(temp.next.value+"\t");
temp=temp.next;
}
System.out.println();
}
/**
* 獲取鏈表的大小
* */
int size()
{
int count=1;
Element temp = header;
while(temp.next!=header)
{
count++;
temp=temp.next;
}
return count;
}
}
雙向鏈表的測試類
package doublelinkedlist;
public class DoubleLinkedListMain {
public static void main(String[] args) {
DoubleLinkedList dlList = new DoubleLinkedList();//有頭結點
dlList.initList();
dlList.insertList(1, 1);
dlList.insertList(2, 2);
dlList.insertList(3, 1);
dlList.insertList(4, 1);
dlList.insertList(5, 1);
dlList.insertList(6, 6);
dlList.print();
dlList.deleteList(3);
dlList.print();
}
}
