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

Java數(shù)據(jù)結(jié)構(gòu)之鏈表的增刪查改詳解

 更新時間:2022年09月01日 16:41:59   作者:愛打醬油的新一  
在這篇文章中,小編將帶大家了解一下Java數(shù)據(jù)結(jié)構(gòu)中鏈表的增刪查改(以下結(jié)果均在IDEA中編譯)希望在方便自己復(fù)習(xí)的同時也能幫助到大家

一. 概念與結(jié)構(gòu)

鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的引用鏈接次序?qū)崿F(xiàn)的 。

雖然有這么多的鏈表的結(jié)構(gòu),但是我們重點掌握兩種:

1.無頭單向非循環(huán)鏈表:結(jié)構(gòu)簡單,一般不會單獨用來存數(shù)據(jù)。實際中更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。另外這種結(jié)構(gòu)在筆試面試中出現(xiàn)很多。

2.無頭雙向鏈表:在Java的集合框架庫中LinkedList底層實現(xiàn)就是無頭雙向循環(huán)鏈表。

二.單鏈表接口實現(xiàn)

接下來新一帶大家寫無頭單向非循環(huán)鏈表

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description: 鏈表
 * User: mac
 * Date: 2022-08-31
 * Time: 10:09
 */

//ListNode代表一個節(jié)點 - 存放在一個節(jié)點類中
class ListNode {
    public int val;
    public ListNode next;

    public ListNode(int val) {
        this.val = val;
    }
}
public class MyLinkedList {
    public ListNode head;//鏈表的頭引用

    //打印鏈表
    public void display() {
        //this.head.next != null 會丟失一個數(shù)據(jù)
        ListNode cur = this.head;
        while (cur != null) {
            System.out.print(cur.val + " ");
            cur = cur.next;
        }
        System.out.println();
    }

    //查找是否包含關(guān)鍵字k
    public boolean contains(int key) {
        ListNode cur = this.head;
        while (cur != null) {
            if (cur.val == key) {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

    //得到單鏈表的長度
    public int size() {
        int count = 0;
        ListNode cur = this.head;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        return count;
    }

    //頭插法
    public void addFirst(int data){
        //綁定位置的時候一定要先綁定后邊
        ListNode node = new ListNode(data);
        node.next = this.head;
        this.head = node;
    }

    //尾插法
    public void addLast(int data){
        ListNode node = new ListNode(data);
        if (this.head == null){//判空,否則就會造成引用異常this.head.next
            this.head = node;
        } else {
            ListNode cur = this.head;
            while (cur.next != null){
                cur = cur.next;
            }
            //cur.next = null;
            cur.next = node;
        }
    }

    public ListNode findindex(int index){//通過下表來移動指針
        ListNode cur = this.head;
        while (index - 1 != 0){
            cur = cur.next;
            index--;
        }
        return cur;
    }

    //任意位置插入,第一個數(shù)據(jù)節(jié)點為0號下標
    public void addIndex(int index, int data){
        if (index < 0 || index > size()){
            System.out.println("index位置不合法!");
            return;
        }
        if (index == 0){
            addFirst(data);
            return;
        }
        if (index == size()){
            addLast(data);
            return;
        }
        ListNode cur = findindex(index);
        ListNode node = new ListNode(data);
        node.next = cur.next;
        cur.next = node;
    }

    //刪除第一次出現(xiàn)的關(guān)鍵字為key的節(jié)點
    public void remove(int key){
        if (this.head == null){
            System.out.println("單鏈表為空,不能刪除!");
            return;
        }
        if (this.head.val == key){//判斷頭部是否為目標節(jié)點
            this.head = this.head.next;
            return;
        }
        ListNode cur = this.head;
        while (cur.next != null){
            if (cur.next.val == key){
                cur.next = cur.next.next;
                return;
            }
            cur = cur.next;
        }
        System.out.println("未找到該節(jié)點");
    }

    //刪除所有值為key的節(jié)點
    public ListNode removeAllKey(int key){
        if (this.head == null) return null;

        ListNode prev = this.head;
        ListNode cur = this.head.next;

        while (cur != null){
            if (cur.val == key){
                prev.next = cur.next;
                cur = cur.next;
            } else{
                prev = cur;
                cur = cur.next;
            }
        }
        //最后處理頭
        if (this.head.val == key){
            this.head = this.head.next;
        }
        return this.head;
    }

    //清空鏈表
    public void clear(){
        //this.head = null;//暴力解決 - 不推薦但沒毛病
        while (this.head != null){
            ListNode curNext = this.head.next;
            this.head.next = null;
            this.head = curNext;
        }
    }

}

到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之鏈表的增刪查改詳解的文章就介紹到這了,更多相關(guān)Java鏈表增刪查改內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)視頻初步壓縮和解壓的代碼示例

    Java實現(xiàn)視頻初步壓縮和解壓的代碼示例

    從攝像頭讀取每一幀的圖片,用一些簡單的方法將多張圖片信息壓縮到一份文件中(自定義的視頻文件),自定義解碼器讀取視頻文件,并將每幀圖片展示成視頻,本文主要介紹了Java實現(xiàn)視頻初步壓縮和解壓,需要的朋友可以參考下
    2023-10-10
  • Java對象的四種引用方式實例分析

    Java對象的四種引用方式實例分析

    這篇文章主要介紹了Java對象的四種引用方式,簡單描述了四種引用方式的概念、應(yīng)用場景并結(jié)合實例形式分析了弱引用所引用對象的垃圾回收過程,需要的朋友可以參考下
    2019-08-08
  • linux配置jdk環(huán)境變量簡單教程

    linux配置jdk環(huán)境變量簡單教程

    這篇文章主要為大家詳細介紹了linux配置jdk環(huán)境變量簡單教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • SpringBoot Actuator未授權(quán)訪問漏洞的排查和解決方法

    SpringBoot Actuator未授權(quán)訪問漏洞的排查和解決方法

    Spring Boot Actuator 是開發(fā)和管理生產(chǎn)級 Spring Boot 應(yīng)用程序的重要工具,它可以幫助你確保應(yīng)用程序的穩(wěn)定性和性能,本文給大家介紹了SpringBoot Actuator未授權(quán)訪問漏洞的排查和解決方法,需要的朋友可以參考下
    2024-05-05
  • Spring Security中用JWT退出登錄時遇到的坑

    Spring Security中用JWT退出登錄時遇到的坑

    使用了JWT后,每次請求都要攜帶 Bearer Token 并且被專門的過濾器攔截解析之后才能將用戶認證信息保存到 SecurityContext 中去,接下來通過本文給大家介紹Spring Security中用JWT退出登錄時遇到的坑,感興趣的朋友一起看看吧
    2021-10-10
  • Spring Security如何在Servlet中執(zhí)行

    Spring Security如何在Servlet中執(zhí)行

    這篇文章主要介紹了Spring Security如何在Servlet中執(zhí)行,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • IntelliJ IDEA報錯Error:java: Compilation failed: internal java compiler error的解決辦法

    IntelliJ IDEA報錯Error:java: Compilation failed: internal java

    今天小編就為大家分享一篇關(guān)于IntelliJ IDEA報錯Error:java: Compilation failed: internal java compiler error的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 基于SpringBoot后端導(dǎo)出Excel文件的操作方法

    基于SpringBoot后端導(dǎo)出Excel文件的操作方法

    這篇文章給大家介紹了基于SpringBoot后端導(dǎo)出Excel文件的操作方法,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • java根據(jù)模板導(dǎo)出PDF的詳細實現(xiàn)過程

    java根據(jù)模板導(dǎo)出PDF的詳細實現(xiàn)過程

    前段時間因為相關(guān)業(yè)務(wù)需求需要后臺生成pdf文件,所以下面這篇文章主要給大家介紹了關(guān)于java根據(jù)模板導(dǎo)出PDF的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Springboot實現(xiàn)密碼的加密解密

    Springboot實現(xiàn)密碼的加密解密

    這篇文章主要為大家詳細介紹了Springboot實現(xiàn)密碼的加密解密,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

泸溪县| 九龙县| 新昌县| 武胜县| 南部县| 武胜县| 宁河县| 壤塘县| 太谷县| 江达县| 唐山市| 海宁市| 孝昌县| 方山县| 苏尼特左旗| 许昌县| 申扎县| 锦屏县| 科技| 仙居县| 邢台市| 时尚| 临海市| 桦川县| 开原市| 女性| 阿合奇县| 克什克腾旗| 施秉县| 陆川县| 昭通市| 海口市| 兴城市| 仁布县| 长海县| 永善县| 伊春市| 察隅县| 明光市| 确山县| 麦盖提县|