Java雙向鏈表按照順序添加節(jié)點(diǎn)的方法實(shí)例
分析過程:
首先需要比較待添加的節(jié)點(diǎn)編號(hào)與已有的節(jié)點(diǎn)編號(hào)的大小,若待添加的節(jié)點(diǎn)編號(hào)已經(jīng)存在,則不能加入。為防止出現(xiàn)空指針的情況,需要對(duì)節(jié)點(diǎn)的位置進(jìn)行判斷。
示例代碼:
package linkedlist; public class DoubleLinkedListDemo { public static void main(String[] args) { // 測(cè)試 System.out.println("雙向鏈表的測(cè)試"); // 創(chuàng)建節(jié)點(diǎn) Node node1 = new Node(1, "道明寺"); Node node2 = new Node(2, "花澤類"); Node node3 = new Node(3, "西門總二郎"); Node node4 = new Node(4, "美作玲"); // 創(chuàng)建一個(gè)雙向鏈表 DoubleLinkedList doubleLinkedList = new DoubleLinkedList(); // 添加節(jié)點(diǎn) doubleLinkedList.addByOrder(node1); doubleLinkedList.addByOrder(node4); doubleLinkedList.addByOrder(node3); doubleLinkedList.addByOrder(node2); // 顯示排序后的雙向鏈表 doubleLinkedList.list(); } } // 創(chuàng)建一個(gè)雙向鏈表的類 class DoubleLinkedList { // 先初始化頭節(jié)點(diǎn),頭節(jié)點(diǎn)不動(dòng) private Node head = new Node(0, ""); // 返回頭節(jié)點(diǎn) public Node getHead() { return head; } // 添加節(jié)點(diǎn)時(shí),根據(jù)編號(hào)將節(jié)點(diǎn)插入到指定位置 // 如果有這個(gè)編號(hào),則添加失敗,并給出提示 public void addByOrder(Node node) { // 頭節(jié)點(diǎn)不能動(dòng),通過一個(gè)輔助指針(變量)幫助找到需要添加的位置 Node temp = head; boolean flag = false; // flag標(biāo)志添加的編號(hào)是否存在,默認(rèn)為false while(true) { if(temp.next == null) { break; } if(temp.next.no > node.no) { break; } if(temp.next.no == node.no) { flag = true; break; } temp = temp.next; // 遍歷鏈表 } if(flag) { System.out.printf("輸入的編號(hào)%d已經(jīng)存在,不能加入\n", node.no); } else { // 為防止出現(xiàn)空指針的情況,需要對(duì)temp節(jié)點(diǎn)位置進(jìn)行判斷 // 若雙向鏈表尚未到達(dá)尾端,則需要將node節(jié)點(diǎn)與其相鄰的后面的節(jié)點(diǎn)進(jìn)行連接 if(temp.next != null) { node.next = temp.next; temp.next.pre = node; } // 無論雙向鏈表是否到達(dá)尾端,都需要將node節(jié)點(diǎn)與其相鄰的前面的節(jié)點(diǎn)進(jìn)行連接 temp.next = node; node.pre = temp; } } // 遍歷雙向鏈表的方法 // 顯示鏈表【遍歷】 public void list() { // 判斷鏈表是否為空 if(head.next == null) { System.out.println("鏈表為空"); return; } // 因?yàn)轭^節(jié)點(diǎn)不能動(dòng),需要一個(gè)輔助變量來遍歷 Node temp = head.next; while (true) { // 判斷是否到鏈表最后 if(temp == null) break; // 輸出節(jié)點(diǎn)的信息 System.out.println(temp); // 將temp后移 temp = temp.next; } } } // 創(chuàng)建一個(gè)雙向鏈表的類 // 定義Node,每個(gè)Node對(duì)象就是一個(gè)節(jié)點(diǎn) class Node { public int no; public String name; public Node next; // 指向下一個(gè)節(jié)點(diǎn),默認(rèn)為null public Node pre; // 指向前一個(gè)節(jié)點(diǎn),默認(rèn)為null // 構(gòu)造器 public Node(int no, String name) { this.no = no; this.name = name; } // 為了顯示方便,重新toString @Override public String toString() { return "Node [no=" + no + ", name=" + name +"]"; } }
運(yùn)行結(jié)果運(yùn)行結(jié)果
總結(jié)
到此這篇關(guān)于Java雙向鏈表按照順序添加節(jié)點(diǎn)的文章就介紹到這了,更多相關(guān)Java雙向鏈表按照順序添加節(jié)點(diǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java web.xml之contextConfigLocation作用案例詳解
這篇文章主要介紹了Java web.xml之contextConfigLocation作用案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08關(guān)于json序列化(javaBean轉(zhuǎn)Json的細(xì)節(jié)處理)
這篇文章主要介紹了關(guān)于json序列化(javaBean轉(zhuǎn)Json的細(xì)節(jié)處理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-03-03Java 實(shí)戰(zhàn)項(xiàng)目之畢業(yè)設(shè)計(jì)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)畢業(yè)設(shè)計(jì)管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11使用graalvm為帶有反射功能的java代碼生成native?image的示例詳解
graalvm讓native鏡像支持反射的關(guān)鍵是利用json提前告訴它哪些類的哪些方法會(huì)被反射調(diào)用,然后它就能力在運(yùn)行時(shí)支持反射了,這篇文章主要介紹了如何使用graalvm為帶有反射功能的java代碼生成native?image,需要的朋友可以參考下2024-02-02Spring @Component自定義注解實(shí)現(xiàn)詳解
@Component是一個(gè)元注解,意思是可以注解其他類注解,如@Controller @Service @Repository @Aspect。官方的原話是:帶此注解的類看為組件,當(dāng)使用基于注解的配置和類路徑掃描的時(shí)候,這些類就會(huì)被實(shí)例化2022-09-09分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證
這篇文章主要為大家介紹分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證的詳解說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02SpringBoot Web開發(fā)之系統(tǒng)任務(wù)啟動(dòng)與路徑映射和框架整合
這篇文章主要介紹了SpringBoot Web開發(fā)中的系統(tǒng)任務(wù)啟動(dòng)與路徑映射和Servlet、Filter、Listener框架整合,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08FP-Growth算法的Java實(shí)現(xiàn)+具體實(shí)現(xiàn)思路+代碼
FP-Growth算法比Apriori算法快很多(但是卻比不上時(shí)間,how time slipped away)。在網(wǎng)上搜索后發(fā)現(xiàn)Java實(shí)現(xiàn)的FP-Growth算法很少,且大多數(shù)不太能理解):太菜。所以就自己實(shí)現(xiàn)了一下。這篇文章重點(diǎn)介紹一下我的Java實(shí)現(xiàn)2021-06-06