国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)二】鏈表和LinkedList詳解

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)二】鏈表和LinkedList詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

鏈表和LinkedList

?1.鏈表的實(shí)現(xiàn)

2.LinkedList的使用

3.ArrayList和LinkedList的區(qū)別

4.鏈表OJ題訓(xùn)練


鏈表和LinkedList

? ? ? ? 當(dāng) ArrayList 任意位置插入或者刪除元素時(shí),就需要將后序元素整體往前或者往后
搬移,時(shí)間復(fù)雜度為 O(n) ,效率比較低,因此 ArrayList 不適合做任意位置插入和刪除比較多的場(chǎng)景。鏈表是一種 物理存儲(chǔ)結(jié)構(gòu)上非連續(xù) 存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的 邏輯順序 是通過(guò)鏈表中的 引用鏈接 次序?qū)崿F(xiàn)的 。

?1.鏈表的實(shí)現(xiàn)

鏈表結(jié)構(gòu)有三種情況,可以相互組合共八種鏈表結(jié)構(gòu)。

  1. 單向或雙向
  2. 帶頭或不帶頭(頭結(jié)點(diǎn)一般裝鏈表長(zhǎng)度信息)
  3. 循環(huán)或非循環(huán)

下面是無(wú)頭單向非循環(huán)鏈表的實(shí)現(xiàn):

public class MyLinkedList {
    class LinkedNode{
        int val;
        LinkedNode next;
        public LinkedNode(int val){
            this.val=val;
        }
    }
    LinkedNode head;

    // 1、無(wú)頭單向非循環(huán)鏈表實(shí)現(xiàn)
        //頭插法
        public void addFirst(int data){
        if(head==null){
            head.val=data;
        }else{
        LinkedNode node=new LinkedNode(data);
        node.next=head;
        head=node;
        }
        }
        //尾插法
        public void addLast(int data){
            LinkedNode cur=head;
            if(head==null){
                head.val=data;
            }else{
            while (cur.next!=null){
                cur=cur.next;
            }
            LinkedNode node=new LinkedNode(data);
            cur.next=node;
        }
        }
        //任意位置插入,第一個(gè)數(shù)據(jù)節(jié)點(diǎn)為0號(hào)下標(biāo)
        public void addIndex(int index,int data){
            LinkedNode cur=head;
            if(head==null){
                head.val=data;
            }else{
                if(index<1||index>size()){
                    System.out.println("插入位置不合法");
                }else{
                    index--;
                    while (index>0){
                        cur=cur.next;
                        index--;
                    }
                    LinkedNode node=new LinkedNode(data);
                    node.next=cur;
                    if(index==1){
                        head=node;
                    }
                }
            }
        }
        //查找是否包含關(guān)鍵字key是否在單鏈表當(dāng)中
        public boolean contains(int key){
            LinkedNode cur=head;
            if(head==null){
                return false;
            }else{
            while (cur.next!=null){
                if(cur.val==key){
                    return true;
                }
                cur=cur.next;
            }
                if(cur.val==key){
                    return true;
                }
            return false;
        }
        }
        //刪除第一次出現(xiàn)關(guān)鍵字為key的節(jié)點(diǎn)
        public void remove(int key){
            if(head!=null){
                if(head.val==key){
                    head=head.next;
                    return;
                }
                LinkedNode cur=head.next;
                LinkedNode prev=head;
            while (cur!=null&&cur.next!=null){
                if(cur.val==key){
                    prev.next=cur.next;
                    return;
                }
                cur=cur.next;
                prev=prev.next;
            }
                System.out.println("沒(méi)有要?jiǎng)h除的元素");
            }
        }
    //刪除所有值為key的節(jié)點(diǎn)
    public void removeAllKey(int key){
        if(head!=null){
            if(head.val==key){
                head=head.next;
            }
            LinkedNode cur=head.next;
            LinkedNode prev=head;
            while (cur!=null&&cur.next!=null){
                if(cur.val==key){
                    prev.next=cur.next;
                }
                cur=cur.next;
                prev=prev.next;
            }
            System.out.println("沒(méi)有要?jiǎng)h除的元素");
        }
        }
    //得到單鏈表的長(zhǎng)度
    public int size(){
            LinkedNode cur=head;
            int num=0;
            while (cur!=null){
                num++;
                cur=cur.next;
            }
        return num;
    }
    public void clear() {
            LinkedNode cur;
            while (head!=null){
                cur=head;
                head=head.next;
                cur.val=0;
                cur.next=null;
            }
    }
    //遍歷
    public void display() {
            LinkedNode cur=head;
            while (cur!=null){
                System.out.print(cur.val+"\t");
                cur=cur.next;
            }
    }
}

2.LinkedList的使用

Java中的linked是一個(gè)雙向鏈表,且實(shí)現(xiàn)了 Deque,Cloneable,Serializable 三個(gè)接口。這說(shuō)明該數(shù)據(jù)結(jié)構(gòu)支持隊(duì)列,克隆和序列化操作的。與 ArrayList 一樣,允許 null 元素的存在,且是不支持多線程的。一些常見(jiàn)方法如下:

方法 解釋
boolean add (E e)
尾插 e
void add (int index, E element)
e 插入到 index 位置
boolean addAll (Collection<? extends E> c)
尾插 c 中的元素
E remove (int index)
刪除 index 位置元素
boolean remove (Object o)
刪除遇到的第一個(gè) o
E get (int index)
獲取下標(biāo) index 位置元素
E set (int index, E element)
將下標(biāo) index 位置元素設(shè)置為 e
void clear ()
清空
boolean contains (Object o)
判斷 o 是否在線性表中
int indexOf (Object o)
返回第一個(gè) o 所在下標(biāo)
int lastIndexOf (Object o)
返回最后一個(gè)o的下標(biāo)
List<E> subList (int fromIndex, int toIndex)
截取部分list

3.ArrayList和LinkedList的區(qū)別

【數(shù)據(jù)結(jié)構(gòu)二】鏈表和LinkedList詳解,數(shù)據(jù)結(jié)構(gòu),鏈表

4.鏈表OJ題訓(xùn)練

下面給出??突蛘吡鄣慕?jīng)典題型,重復(fù)練習(xí)對(duì)加深知識(shí)點(diǎn)很有幫助文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-806527.html

  1. 反轉(zhuǎn)一個(gè)單鏈表。
  2. 鏈表的回文結(jié)構(gòu)。
  3. 輸入兩個(gè)鏈表,找出它們的第一個(gè)公共結(jié)點(diǎn)。
  4. 給定一個(gè)鏈表,判斷鏈表中是否有環(huán)。
  5. 給定一個(gè)鏈表,返回鏈表開(kāi)始入環(huán)的第一個(gè)節(jié)點(diǎn)。 如果鏈表無(wú)環(huán),則返回?NULL

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)二】鏈表和LinkedList詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • LinkedList數(shù)據(jù)結(jié)構(gòu)鏈表

    LinkedList 在Java中是一個(gè)實(shí)現(xiàn)了 List 和 Deque 接口的雙向鏈表。它允許我們?cè)诹斜淼膬啥颂砑踊騽h除元素,同時(shí)也支持在列表中間插入或移除元素。在分析 LinkedList 之前,需要理解鏈表這種數(shù)據(jù)結(jié)構(gòu): 鏈表 :鏈表是一種動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),由一系列節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)部分

    2024年02月20日
    瀏覽(19)
  • 【數(shù)據(jù)結(jié)構(gòu)(三)】鏈表與LinkedList

    【數(shù)據(jù)結(jié)構(gòu)(三)】鏈表與LinkedList

    ?博主主頁(yè): 33的博客? ??文章專欄分類:數(shù)據(jù)結(jié)構(gòu)?? ??我的代碼倉(cāng)庫(kù): 33的代碼倉(cāng)庫(kù)?? ?????? 關(guān)注我?guī)銓W(xué)更多數(shù)據(jù)結(jié)構(gòu)知識(shí) 在上一篇文章中,我們已經(jīng)認(rèn)識(shí)了順序表,通過(guò)源碼我們知道ArrayList底層是使用數(shù)組來(lái)存儲(chǔ)元素,當(dāng)在ArrayList任意位置插入或者刪除元素時(shí),

    2024年04月13日
    瀏覽(93)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表和鏈表

    【數(shù)據(jù)結(jié)構(gòu)】順序表和鏈表

    線性表(linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu),常見(jiàn)的線性表:順序表、鏈表、棧、隊(duì)列、字符串... 線性表在邏輯上是線性結(jié)構(gòu),也就說(shuō)是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的, 線性表在物理上

    2024年01月20日
    瀏覽(156)
  • 數(shù)據(jù)結(jié)構(gòu)2:順序表和鏈表

    數(shù)據(jù)結(jié)構(gòu)2:順序表和鏈表

    目錄 1.線性表 2.順序表 2.1概念及結(jié)構(gòu) 2.2接口實(shí)現(xiàn) 2.3數(shù)據(jù)相關(guān)面試題 2.4順序表的問(wèn)題及思考 3.鏈表 3.1鏈表的概念及結(jié)構(gòu) 3.2鏈表的分類 3.3鏈表的實(shí)現(xiàn) 3.4鏈表面試題 3.5雙向鏈表的實(shí)現(xiàn) 4.順序表和鏈表的區(qū)別 線性表(linear list)是具有相同特征的數(shù)據(jù)元素的有限序列。線性表是

    2023年04月17日
    瀏覽(93)
  • 數(shù)據(jù)結(jié)構(gòu):2_順序表和鏈表

    數(shù)據(jù)結(jié)構(gòu):2_順序表和鏈表

    線性表(linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié)構(gòu), 常見(jiàn)的線性表:順序表、鏈表、棧、隊(duì)列、字符串… 線性表在邏輯上是線性結(jié)構(gòu),也就說(shuō)是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的 ,線性表在物理上

    2024年01月18日
    瀏覽(100)
  • 數(shù)據(jù)結(jié)構(gòu)順序表和鏈表(超詳細(xì))

    數(shù)據(jù)結(jié)構(gòu)順序表和鏈表(超詳細(xì))

    線性表 ( linear list ) 是 n 個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu), 常見(jiàn)的線性表:順序表、鏈表、棧、隊(duì)列、字符串 ... 線性表在邏輯上是線性結(jié)構(gòu),也就說(shuō)是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的, 線性表在

    2024年02月13日
    瀏覽(108)
  • 數(shù)據(jù)結(jié)構(gòu):隊(duì)列(鏈表和數(shù)組模擬實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu):隊(duì)列(鏈表和數(shù)組模擬實(shí)現(xiàn))

    目錄 1.何為隊(duì)列 2.鏈表模擬實(shí)現(xiàn) 2.1 節(jié)點(diǎn)和隊(duì)列創(chuàng)建 2.2 初始化隊(duì)列 2.3 入隊(duì)操作 2.4 出隊(duì)操作 2.5 遍歷隊(duì)列 2.6 獲取隊(duì)首和隊(duì)尾元素 2.7 判斷隊(duì)列是否為空 2.8 完整實(shí)現(xiàn) 3.?數(shù)組模擬實(shí)現(xiàn) 3.1 創(chuàng)建隊(duì)列 3.2 入隊(duì)和出隊(duì)操作 3.3 遍歷隊(duì)列 3.4 獲取隊(duì)首和隊(duì)尾元素 ?3.5 判斷隊(duì)列是否為空

    2024年02月03日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(上)

    數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(上)

    鏈表 邏輯結(jié)構(gòu) 無(wú)頭單向非循環(huán)鏈表:結(jié)構(gòu)簡(jiǎn)單,一般不會(huì)單獨(dú)用來(lái)存數(shù)據(jù)。實(shí)際中更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。 無(wú)頭雙向鏈表:在Java的集合框架庫(kù)中LinkedList底層實(shí)現(xiàn)就是無(wú)頭雙向循環(huán)鏈表。 鏈表的實(shí)現(xiàn) 創(chuàng)建一個(gè)鏈表 遍歷單鏈表 、 得到

    2024年02月11日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(下)

    數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(下)

    ** ** 結(jié)論 讓一個(gè)指針從鏈表起始位置開(kāi)始遍歷鏈表,同時(shí)讓一個(gè)指針從判環(huán)時(shí)相遇點(diǎn)的位置開(kāi)始繞環(huán)運(yùn)行,兩個(gè)指針都是每次均走一步,最終肯定會(huì)在入口點(diǎn)的位置相遇。 LinkedList的模擬實(shí)現(xiàn) 單個(gè)節(jié)點(diǎn)的實(shí)現(xiàn) 尾插 運(yùn)行結(jié)果如下: 也可以暴力使用 全部代碼 MyLinkedList IndexOut

    2024年02月11日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】順序表和鏈表(1)

    【數(shù)據(jù)結(jié)構(gòu)初階】順序表和鏈表(1)

    線性表(linear list) 是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu),常見(jiàn)的線性表:順序表、鏈表、棧、隊(duì)列、字符串… 線性表在邏輯上是線性結(jié)構(gòu),也就說(shuō)是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上

    2024年02月08日
    瀏覽(1598)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包