啊,寫完了雙端之後,雙向就好寫多了,重點是改變結點的next指向的時候,一定要一起把previous改了,並且要注意可能在last結點處進行指向修改時存在的的null情況。
package linklist;
/* * 結點定義
*/class doublynode
public void display() }/*
* 寫乙個雙向鍊錶
*/public class doublylist
/** 從頭插入結點
*/public void insertfirst(object d) else
newnode.next = first;
first = newnode; }
/* * 從尾部插入結點
*/public void insertlast(object d) else
last = newnode; }
/**雙向鍊錶的插入操作注意點 :
* (1) 通用的:採用方法為定位到location-1處,所以第乙個位置的插入要單獨操作
* (2) 此次採用的方法是遍歷所有結點,找到對應位置後插入,返回。
* (3) 插入操作時,只需注意在尾部插入時last結點的變化,而不像刪除時還要考慮
* 插入第乙個結點時last的變化。
* (4) 當在尾部插入時,current.next為null,所以不需要改變其previous。
* (5) 改變next指向時,一定要同時改變previous指向。
*/public void insertloc(int loc, object d)
if(j == loc)
while(current != null) else
//這條語句已經將current的next指向改變了,所以不能將else後面的語句寫在它後面
current.next = newnode;
newnode.previous = current;
return;
}current = current.next;
j++;
} }/*
* 任意位置刪除
*/public void deleteloc(int loc)
if(j == loc)
//將current的值賦給first,first就把current的next,previous等等都繼承了
//所以要將first.previous改為null
first = current.next;
first.previous = null;
return;
} while(current.next != null) else
current.next = current.next.next;
return;
}current = current.next;
j++;
} }/*
* 從頭列印鍊錶
*/public void displayfirst()
system.out.println(); }
/* * 從尾部開始列印鍊錶
*/public void displaylast()
system.out.println(); }
public boolean isempty()
public int length()
return length; }
/* * 測試雙端鍊錶
*/public static void main(string args)
}
java資料結構 雙向鍊錶
鍊錶是非常常見的一類線性結構的資料結構,每個節點包含有指標域和資料域,常見的包括單項列表 雙向列表 迴圈列表。這篇文章將詳細介紹雙向鍊錶。本文將介紹雙向鍊錶的插入節點 根據位置插入節點 刪除頭結點 刪除尾節點 刪除指定位置節點,檢視鍊錶元素 檢視頭結點 檢視尾節點 檢視鍊錶長度 判斷鍊錶是否為空。鍊...
資料結構之雙向鍊錶
簡述 指標域有乙個指標 而言,占用資源更大,但相應的 雙向鍊錶遍歷的時候只需要乙個指標就可以,而且 只有得到其中任何乙個節點就是得到整個鍊錶,單向鍊錶必須得到他的頭節點,才能遍歷整個鍊錶,而且得有兩個指標。實現 bothwaylinklist.h ifndef mymodule h define m...
資料結構之 雙向鍊錶
單鏈表的結點都只有乙個指向下乙個結點的指標。單鏈表的資料元素無法直接訪問其前驅元素。建立鍊錶 銷毀鍊錶 獲取鍊錶長度 清空鍊錶 獲取第pos個元素操作 插入元素到位置pos 刪除位置pos處的元素 dlinklist dlinklist creat 建立乙個鍊錶 void dlinklist des...