鏈表之雙端鏈表


        從單鏈表的特性可以看出,向鏈表中添加元素除了添加到第一個位置以外都必須遍歷鏈表,如果要在鏈表的末尾添加一個元素則需要從第一個一次遍歷到鏈表的最後一個元素纔可以完成添加。當數據量比較大的時候向末尾添加元素的操作過於繁瑣。於是雙端鏈表出現了,他可以解決想單鏈表末尾添加元素操作繁瑣的問題。

        雙端鏈表相比於單鏈表只是添加了一個指針指向鏈表的最後一個元素(區別於雙向鏈表)。其他的操作和單鏈表一致。


java代碼的實現:


public class FirstLastList {
Node firstNode;
Node lastNode;

public Node getFirstNode() {
return firstNode;
}
public void setFirstNode(Node firstNode) {
this.firstNode = firstNode;
}
public Node getLastNode() {
return lastNode;
}
public void setLastNode(Node lastNode) {
this.lastNode = lastNode;
}
public FirstLastList(){
firstNode = null;
lastNode = null;
}
public boolean isEmpty(){
return lastNode==null;
}
public void addFirst(String value){
Node node = new Node(value);
if(isEmpty()){
node.setNext(null);
lastNode = node;
firstNode = node;
}else {
node.setNext(firstNode);
firstNode = node;
}
}
public void delFirst(){
if(isEmpty()){
return;
}else {
if(firstNode.getNext()==null){
firstNode = lastNode = null;
}else {
firstNode = firstNode.getNext();
}
}
}
public void addLast(String value){
Node node = new Node(value);
if(isEmpty()){
node.setNext(null);
firstNode = lastNode = node;
}else {
lastNode.setNext(node);
lastNode = node;
}
}
public void show(){
if(isEmpty()){
return;
}else {
Node node = firstNode;
while(node!=null){
System.out.print(node.showValue()+" ");
node = node.getNext();
}
System.out.println();
}
}
}


測試代碼:


FirstLastList fLastList = new FirstLastList();
for(int i =100;i<1000;i+=100){
fLastList.addFirst(i+"");
}
fLastList.show();
fLastList.addFirst(123+"");
fLastList.addFirst(456+"");
fLastList.show();
fLastList.addLast(654+"");
fLastList.addLast(321+"");
fLastList.show();
fLastList.delFirst();
fLastList.show();
fLastList.delFirst();
fLastList.show();


測試結果:

900 800 700 600 500 400 300 200 100
456 123 900 800 700 600 500 400 300 200 100
456 123 900 800 700 600 500 400 300 200 100 654 321
123 900 800 700 600 500 400 300 200 100 654 321
900 800 700 600 500 400 300 200 100 654 321


結論:

雙端鏈表僅僅解決想單鏈表末尾添加元素的方法。

發佈了34 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章