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

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

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

一. 概念與結構

鏈表是一種物理存儲結構上非連續(xù)存儲結構,數(shù)據(jù)元素的邏輯順序是通過鏈表中的引用鏈接次序實現(xiàn)的 。

雖然有這么多的鏈表的結構,但是我們重點掌握兩種:

1.無頭單向非循環(huán)鏈表:結構簡單,一般不會單獨用來存數(shù)據(jù)。實際中更多是作為其他數(shù)據(jù)結構的子結構,如哈希桶、圖的鄰接表等等。另外這種結構在筆試面試中出現(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();
    }

    //查找是否包含關鍵字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)的關鍵字為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;
        }
    }

}

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

相關文章

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

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

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

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

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

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

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

    SpringBoot Actuator未授權訪問漏洞的排查和解決方法

    Spring Boot Actuator 是開發(fā)和管理生產(chǎn)級 Spring Boot 應用程序的重要工具,它可以幫助你確保應用程序的穩(wěn)定性和性能,本文給大家介紹了SpringBoot Actuator未授權訪問漏洞的排查和解決方法,需要的朋友可以參考下
    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í)行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • IntelliJ IDEA報錯Error:java: Compilation failed: internal java compiler error的解決辦法

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

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

    基于SpringBoot后端導出Excel文件的操作方法

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

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

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

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

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

最新評論

屏山县| 陇南市| 庆元县| 桐城市| 萨迦县| 石景山区| 隆尧县| 江西省| 贵定县| 阿克| 长岛县| 古丈县| 连平县| 克拉玛依市| 徐州市| 松滋市| 屯昌县| 富宁县| 新宾| 武川县| 北宁市| 西乌珠穆沁旗| 随州市| 色达县| 新乐市| 筠连县| 泉州市| 来安县| 芮城县| 民乐县| 盐边县| 桑植县| 神池县| 新平| 绥阳县| 庆云县| 丹东市| 阳江市| 吕梁市| 菏泽市| 美姑县|