最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)雙向鏈表

 更新時(shí)間:2022年05月25日 16:33:54   作者:away.....  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)雙向鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java實(shí)現(xiàn)雙向鏈表的具體代碼,供大家參考,具體內(nèi)容如下

1、雙向鏈表

1.1 雙向鏈表的每個(gè)節(jié)點(diǎn)組成包含節(jié)點(diǎn)數(shù)據(jù),上一個(gè)節(jié)點(diǎn)(pre),下一個(gè)節(jié)點(diǎn)(next)

1.2 雙向鏈表節(jié)點(diǎn)結(jié)構(gòu)

class Node {
//節(jié)點(diǎn)數(shù)據(jù)data
?? ??? ?int data;
?? ??? ?Node pre;
?? ??? ?Node next;

?? ??? ?public Node(int data) {
?? ??? ??? ?this.data = data;
?? ??? ?}
?? ??? ?public Node() {
?? ??? ??? ?super();
?? ??? ?}
?? ??? ?

?? ?}

2、雙向鏈表的增刪改查(crud)

2.1 雙向鏈表的增刪改查

public class DoubleLinkedList {
?? ?private Node first;
?? ?private Node current;

?? ?private static class Node {

?? ??? ?int data;
?? ??? ?Node pre;
?? ??? ?Node next;

?? ??? ?public Node(int data) {
?? ??? ??? ?super();
?? ??? ??? ?this.data = data;
?? ??? ?}

?? ??? ?public Node() {
?? ??? ??? ?super();
?? ??? ?}
?? ??? ?

?? ?}

?? ?public DoubleLinkedList() {
?? ??? ?super();
?? ?}

?? ?/**
?? ? * 雙向鏈表增加
?? ? */
?? ?public void add(int val) {
?? ??? ?// 如果是頭結(jié)點(diǎn)
?? ??? ?if (first == null) {
?? ??? ??? ?Node node = new Node(val);
?? ??? ??? ?first = node;
?? ??? ??? ?first.pre = null;
?? ??? ??? ?first.next = null;
?? ??? ??? ?current = first;
?? ??? ?} else {
?? ??? ??? ?Node node = new Node(val);
?? ??? ??? ?current.next = node;
?? ??? ??? ?node.pre = current;
?? ??? ??? ?current = node;
?? ??? ?}
?? ?}

?? ?/**
?? ? * 雙向鏈表的刪除 刪除所有值為val的元素
?? ? */
?? ?public void del(int val) {
?? ??? ?if (first == null) {
?? ??? ??? ?System.out.println("雙向鏈表為空,無(wú)法進(jìn)行刪除操作!");
?? ??? ?} else {
?? ??? ??? ?
?? ??? ??? ?Node node = first;
?? ??? ??? ?while(true) {
?? ??? ??? ??? ?// 首節(jié)點(diǎn)的刪除可能
?? ??? ??? ??? ?if (node.data == val) {
?? ??? ??? ??? ??? ?//如果只有一個(gè)節(jié)點(diǎn)
?? ??? ??? ??? ??? ?if(node.next==null) {
?? ??? ??? ??? ??? ??? ?node=null;
?? ??? ??? ??? ??? ??? ?first=null;
?? ??? ??? ??? ??? ??? ?System.out.println("刪除所有的"+val+"成功");
?? ??? ??? ??? ??? ??? ?return;
?? ??? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ??? ?node = node.next;
?? ??? ??? ??? ??? ??? ?node.pre.next=null;
?? ??? ??? ??? ??? ??? ?node.pre=null;
?? ??? ??? ??? ??? ??? ?first=node;
?? ??? ??? ??? ??? ??? ?//刪除后重新循環(huán)判斷首節(jié)點(diǎn)是否值相等
?? ??? ??? ??? ??? ??? ?continue;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?} else {
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?while (node.next != null) {
?? ??? ??? ??? ??? ??? ?if (node.data == val) {
?? ??? ??? ??? ??? ??? ??? ?node.pre.next = node.next;
?? ??? ??? ??? ??? ??? ??? ?node.next.pre = node.pre;
?? ??? ??? ??? ??? ??? ??? ?Node tempNode = node.pre;
?? ??? ??? ??? ??? ??? ??? ?node.pre=null;
?? ??? ??? ??? ??? ??? ??? ?node.next=null;
?? ??? ??? ??? ??? ??? ??? ?node = tempNode;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?node = node.next;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?// 末節(jié)點(diǎn)刪除可能
?? ??? ??? ??? ??? ?if (node.data == val) {
?? ??? ??? ??? ??? ??? ?node.pre.next=null;
?? ??? ??? ??? ??? ??? ?node.pre=null;

?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?System.out.println("刪除所有的"+val+"成功");
?? ??? ??? ??? ??? ?//末節(jié)點(diǎn)判斷完成后,結(jié)束循環(huán)
?? ??? ??? ??? ??? ?return;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}

?? ?}
?? ?/**
?? ? * 遍歷雙向鏈表操作
?? ? */
?? ?public void traverse() {
?? ??? ?if(first==null) {
?? ??? ??? ?System.out.println("雙向鏈表為空");
?? ??? ?}else {
?? ??? ??? ?Node node = first;
?? ??? ??? ?//循環(huán)遍歷到倒數(shù)第二個(gè)節(jié)點(diǎn)截止
?? ??? ??? ?while(node.next!=null) {
?? ??? ??? ??? ?System.out.print(node.data+" ");
?? ??? ??? ??? ?node=node.next;
?? ??? ??? ?}
?? ??? ??? ?//遍歷最后一個(gè)節(jié)點(diǎn)
?? ??? ??? ?System.out.print(node.data);
?? ??? ?}
?? ?}
?? ?/**
?? ? * 雙向鏈表插入操作,在所有值為value的后面插入一個(gè)數(shù)insert
?? ? */
?? ?public void insert(int value,int insert) {
?? ??? ?
?? ??? ?if(first==null) {
?? ??? ??? ?System.out.println("雙向鏈表為空,無(wú)法插入");
?? ??? ?}else {
?? ??? ??? ?Node node = first;
?? ??? ??? ?//循環(huán)遍歷到倒數(shù)第二個(gè)節(jié)點(diǎn)截止
?? ??? ??? ?while(node.next!=null) {
?? ??? ??? ??? ?if(node.data==value) {
?? ??? ??? ??? ??? ?Node insertNode = new Node(insert);
?? ??? ??? ??? ??? ?node.next.pre = insertNode;
?? ??? ??? ??? ??? ?insertNode.next = node.next;
?? ??? ??? ??? ??? ?node.next = insertNode;
?? ??? ??? ??? ??? ?insertNode.pre = node;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?node=node.next;
?? ??? ??? ?}
?? ??? ??? ?//最后一個(gè)節(jié)點(diǎn)后插入
?? ??? ??? ?if(node.data == value) {
?? ??? ??? ??? ?Node insertNode = new Node(insert);
?? ??? ??? ??? ?node.next = insertNode;
?? ??? ??? ??? ?insertNode.pre = node;
?? ??? ??? ?}
?? ??? ??? ?System.out.println();
?? ??? ??? ?System.out.println("插入操作完成");
?? ??? ??? ?
?? ??? ?}
?? ?}
?? ?/**
?? ? * 雙向鏈表修改數(shù)據(jù),將所有值為val的修改為revised
?? ? */
?? ?public void revise(int val,int revised) {
?? ??? ?if(first==null) {
?? ??? ??? ?System.out.println("雙向鏈表為空,無(wú)法修改");
?? ??? ?}else {
?? ??? ??? ?Node node = first;
?? ??? ??? ?while (node.next!=null) {
?? ??? ??? ??? ?if(node.data == val) {
?? ??? ??? ??? ??? ?node.data = revised;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?node=node.next;
?? ??? ??? ?}
?? ??? ??? ?if(node.data == val) {}
?? ??? ??? ?node.data = revised;
?? ??? ?}
?? ??? ?System.out.println("修改操作完成");
?? ?}
?? ?/**
?? ? * 查找雙向鏈表中是否包含val值
?? ? * @param val
?? ? */
?? ?public void contain(int val) {
?? ??? ?if(first==null) {
?? ??? ??? ?System.out.println("鏈表為空,無(wú)法查找");
?? ??? ?}else {
?? ??? ??? ?Node node = first;
?? ??? ??? ?while(node!=null) {
?? ??? ??? ??? ?if(node.data==val) {
?? ??? ??? ??? ??? ?System.out.println("該鏈表中包含"+val+"的值");
?? ??? ??? ??? ??? ?return;
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?node=node.next;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?System.out.println("該鏈表不包含"+val);
?? ??? ?}
?? ?}

}

2.2 測(cè)試類(main入口函數(shù))

public class Main {
?? ?public static void main(String[] args) {
?? ??? ?DoubleLinkedList list = new DoubleLinkedList();

?? ??? ?list.add(1);
?? ??? ?list.add(1);
?? ??? ?list.add(2);
?? ??? ?list.insert(1, 3);
?? ??? ?list.add(2);
?? ??? ?list.add(3);
?? ??? ?list.traverse();
?? ??? ?System.out.println();
?? ??? ?list.del(1);
?? ?
?? ??? ?list.traverse();
?? ??? ?list.add(4);
?? ??? ?System.out.println();
?? ??? ?list.traverse();
?? ??? ?System.out.println();
?? ??? ?list.contain(4);
?? ??? ?
?? ??? ?list.contain(3);
?? ??? ?list.contain(0);

?? ?}
}

3、一些缺點(diǎn)待修改

1)、循環(huán)結(jié)束是到倒數(shù)第二個(gè)節(jié)點(diǎn)截止的,要考慮多種不同的情況,頭節(jié)點(diǎn)刪除,尾結(jié)點(diǎn)刪除等,導(dǎo)致刪除函數(shù)復(fù)雜了很多
2)、在contain函數(shù)中有修改到循環(huán)到最后一個(gè)節(jié)點(diǎn)
3)、后續(xù)對(duì)刪除函數(shù)修改有空再操作(待完成)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java單例模式的線程安全,餓漢和懶漢模式詳解

    Java單例模式的線程安全,餓漢和懶漢模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java單例模式的線程安全,餓漢和懶漢模式。文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • SpringBoot實(shí)現(xiàn)網(wǎng)頁(yè)消息推送的5種方法小結(jié)

    SpringBoot實(shí)現(xiàn)網(wǎng)頁(yè)消息推送的5種方法小結(jié)

    項(xiàng)目開(kāi)發(fā)中,實(shí)時(shí)消息推送已成為提升用戶體驗(yàn)的關(guān)鍵技術(shù),本文將詳細(xì)介紹SpringBoot中實(shí)現(xiàn)網(wǎng)頁(yè)消息推送的幾種主流方案,希望對(duì)大家有所幫助
    2025-03-03
  • Java中的定時(shí)任務(wù)調(diào)度Quartz舉例詳解

    Java中的定時(shí)任務(wù)調(diào)度Quartz舉例詳解

    這篇文章主要介紹了Java中的定時(shí)任務(wù)調(diào)度Quartz的相關(guān)資料,Quartz是Java平臺(tái)上的一個(gè)強(qiáng)大且靈活的任務(wù)調(diào)度庫(kù),廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用中,本文介紹了Quartz的基本概念、核心組件、使用步驟和示例,幫助你更好地利用Quartz進(jìn)行定時(shí)任務(wù)調(diào)度,需要的朋友可以參考下
    2024-12-12
  • springboot jackson配置教程

    springboot jackson配置教程

    這篇文章主要介紹了springboot jackson配置教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 關(guān)于mybatis的一級(jí)緩存和二級(jí)緩存的那些事兒

    關(guān)于mybatis的一級(jí)緩存和二級(jí)緩存的那些事兒

    MyBatis自帶的緩存有一級(jí)緩存和二級(jí)緩存,今天我們就來(lái)學(xué)習(xí)一下,文中有非常詳細(xì)的總結(jié),對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • mybatis開(kāi)啟spring事務(wù)代碼解析

    mybatis開(kāi)啟spring事務(wù)代碼解析

    這篇文章主要介紹了mybatis開(kāi)啟spring事務(wù)代碼解析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • Java如何做帶復(fù)選框的菜單實(shí)例代碼

    Java如何做帶復(fù)選框的菜單實(shí)例代碼

    大家好,本篇文章主要講的是Java如何做帶復(fù)選框的菜單實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • SpringBoot里使用Servlet進(jìn)行請(qǐng)求的實(shí)現(xiàn)示例

    SpringBoot里使用Servlet進(jìn)行請(qǐng)求的實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot里使用Servlet進(jìn)行請(qǐng)求的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 解決feign調(diào)用接口不穩(wěn)定的問(wèn)題

    解決feign調(diào)用接口不穩(wěn)定的問(wèn)題

    這篇文章主要介紹了解決feign調(diào)用接口不穩(wěn)定的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • java 排序算法之希爾算法

    java 排序算法之希爾算法

    這篇文章主要介紹了java 排序算法之希爾排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

安龙县| 文化| 仙游县| 丰顺县| 郴州市| 三明市| 五峰| 温泉县| 苏尼特右旗| 乌兰察布市| 思茅市| 开原市| 澜沧| 博乐市| 哈巴河县| 永德县| 卓尼县| 定结县| 淮阳县| 湾仔区| 新化县| 信丰县| 翁牛特旗| 芜湖市| 家居| 扶绥县| 曲周县| 霍邱县| 蒲江县| 阳原县| 正阳县| 盐边县| 涞水县| 筠连县| 保定市| 巴彦县| 城步| 崇礼县| 青阳县| 闻喜县| 阿巴嘎旗|