您好,登錄后才能下訂單哦!
本文實例講述了Java數據結構之雙端鏈表原理與實現方法。分享給大家供大家參考,具體如下:
一、概述:
1、什么時雙端鏈表:
鏈表中保持這對最后一個連點引用的鏈表
2、從頭部插入
要對鏈表進行判斷,如果為空則設置尾節點為新添加的節點
3、從尾部進行插入
如果鏈表為空,則直接設置頭節點為新添加的節點,否則設置尾節點的后一個節點為新添加的節點
4、從頭部刪除
判斷節點是否有下個節點,如果沒有則設置節點為null
二、具體實現
/** * @描述 頭尾相接的鏈表 * @項目名稱 Java_DataStruct * @包名 com.struct.linklist * @類名 LinkList * @author chenlin * @date 2010年6月26日 上午8:00:28 * @version 1.0 */ public class FirstLastLinkList { //頭 private Node first; //尾 private Node last; public FirstLastLinkList(){ first = null; last = null; } /** * 插入數據 * @param value */ public void insertFirst(long value){ Node newNode = new Node(value); if (first == null) { last = newNode; }else { //把first節點往下移動 newNode.next = first; } //把插入的節點作為新的節點 first = newNode; } /** * 插入數據 * @param value */ public void insertLast(long value){ Node newNode = new Node(value); if (first == null) { first = newNode; }else { last.next = newNode; } //把最后個節點設置為最新的節點 last = newNode; } public boolean isEmpty(){ return first == null; } /** * 刪除頭節點 * @param value * @return */ public Node deleteFirst(){ if (first == null) { throw new RuntimeException("鏈表數據不存在"); } if (first.next == null) { last = null; } Node temp = first; first = temp.next; return temp; } public Node deleteByKey(long key){ Node current = first; Node last = first; while(current.data != key){ if (current.next == null) { System.out.println("沒找到節點"); return null; } last = current; current = current.next; } if (current == first) { //return deleteFirst(); //指向下個就表示刪除第一個 first = first.next; }else { last.next = current.next; } return current; } /** * 顯示所有的數據 */ public void display(){ if (first == null) { //throw new RuntimeException("鏈表數據不存在"); return; } Node current = first; while(current != null){ current.display(); current = current.next; } System.out.println("---------------"); } /** * 查找節點1 * @param value * @return */ public Node findByValue(long value){ Node current = first; while(current != null){ if (current.data != value) { current = current.next; }else { break; } } if (current == null) { System.out.println("沒找到"); return null; } return current; } /** * 查找節點2 * * @param key * @return */ public Node findByKey(long key) { Node current = first; while (current.data != key) { if (current.next == null) { System.out.println("沒找到"); return null; } current = current.next; } return current; } /** * 根據索引查找對應的值 * @param position * @return */ public Node findByPosition(int position){ Node current = first; //為什么是position - 1,因為要使用遍歷,讓current指向下一個, 所以position - 1的下個node就是要找的值 for (int i = 0; i < position - 1 ; i++) { current = current.next; } return current; } public static void main(String[] args) { FirstLastLinkList linkList = new FirstLastLinkList(); linkList.insertFirst(21); linkList.insertFirst(22); linkList.insertFirst(23); linkList.insertLast(24); linkList.insertLast(25); linkList.insertLast(26); linkList.insertLast(27); linkList.display(); System.out.println("---查找-------------------------------------"); linkList.findByKey(25).display(); System.out.println("--刪除first-------------------------------------"); //linkList.deleteFirst().display(); ///linkList.deleteFirst().display(); //linkList.deleteFirst().display(); //linkList.deleteFirst().display(); System.out.println("-刪除指定值---------------------------------------"); linkList.deleteByKey(27).display(); linkList.deleteByKey(21).display(); System.out.println("----------------------------------------"); linkList.display(); } }
更多關于java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。