鍊錶實現系列(二) 雙向鍊錶Java實現

2021-09-10 09:33:20 字數 2725 閱讀 2679

雙向鍊錶原理見部落格:資料結構 | 雙向鍊錶簡單實現及圖示

(注:我採用的是正規化實現,如需實現具體鍊錶,只需將type改為具體型別即可。)

實現的操作包括:

在頭節點之前插入節點;

在尾節點之後插入節點;

刪除包含指定資料的節點;

刪除尾節點;

查詢包含指定資料的節點;

獲取鍊錶的長度;

輔助操作包括:

清空鍊錶;

判斷鍊錶是否為空。

下面是雙向鍊錶節點的**(doublenode)

public class doublenode

public doublenode(type data)

public doublenode(type data, doublenode next, doublenode prev)

/*** 三種屬性的 get() 方法

*/public type getdata()

public doublenode getnext()

public doublenode getprev()

/*** 三種屬性的 set() 方法

*/public void setdata(type data)

public void setnext(doublenode next)

public void setprev(doublenode prev)

}

下面是雙向鍊錶實現的**(doublelist)

public class doublelist

public doublelist(doublenode node)

public doublelist(doublenode head, doublenode tail)

/*** 在頭節點之前加入資料

* @param data:新增節點的資料

* @return :插入成功與否

*/public boolean addnodebeforehead(type data) else

}catch (exception e)

return result;

}/**

* 在尾節點之後加入資料

* @param data:插入的資料

* @return :插入成功與否

*/public boolean addnodeaftertail(type data) else

}catch (exception e)

return result;

}/**

* 根據資料刪除節點

* 遍歷時從頭節點開始

* 僅刪除離頭節點最近的滿足要求的節點

* @param data:需要刪除的資料

* @return :刪除的節點資訊

*/public int removenodebydata(type data)else

}return -1;

}/**

* 從頭節點開始查詢資料

* @param data:需要查詢的資料

* @return 查詢到的節點,不存在則返回空

*/public int findnodebydatafromhead(type data)

}return -1;

}/**

* 從尾節點開始查詢資料

* @param data :需要查詢的資料

* @return 查詢到的節點,不存在則返回空

*/public int findnodebydatafromtail(type data)else

}return -1;

}/**

* 從頭節點開始,計算鍊錶的長度(即節點個數)

* @return 鍊錶長度

*/public int getlistlength()

return length;

}/**

* 從頭節點開始,列印雙向煉表裡的資料

* 僅用於測試

*/public void displayfromhead()

system.out.println();

}/**

* 從尾節點開始,列印雙向煉表裡的資料

* 僅用於測試

*/public void displayfromtail()

system.out.println("\n");

}}

下面是測試**(doubletest) 

public class doubletest 

public void run()

public void testaddnodebeforehead()

display();

}public void testaddnodeaftertail()

public void testremovenodebydata()else

display();

}public void testfindnodebydatafromhead()else

display();

}public void testfindnodebydatafromtail()else

display();

}public void testgetlistlength()

public void display()

}

**不夠規範,還望多多包涵~/bq

3 雙向鍊錶(Java)

雙向鍊錶中每個節點保留兩個引用prev和next,讓prev指向當前節點的上乙個節點,讓next指向當前節點的下乙個節點,此時的鍊錶既可以向後一次訪問每個節點,也可以依次訪問每個節點,也可以向前一次訪問每個節點。操作 查詢 即可從頭結點開始搜尋,也可以從尾節點開始搜尋,取決於被搜尋的節點是更靠近he...

鍊錶 三 雙向鍊錶

前兩篇部落格中介紹的鏈式儲存結構中只有乙個指示直接後繼的指標域。因此,從單鏈表中的某個結點出發,之能向後遍歷每個結點,所尋找這個結點的直接前驅只能向用頭結點出。而若在每個結點的指標域中再加入乙個指向當前結點直接前驅的指標,就可以克服以上問題。雙向鍊錶,帶頭節點,頭的前驅為null,尾的後繼為null...

鍊錶 05 雙向鍊錶

main.cpp include include doublelinkedlist.h using namespace std int main 雙向鍊錶類 class doublelinkedlist void insert doublelinkednode doublelinkednode 新節...