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

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??博客主頁(yè):?小扳_-CSDN博客
?感謝大家點(diǎn)贊??收藏?評(píng)論?
??

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn)),Java 數(shù)據(jù)結(jié)構(gòu)與算法篇,算法,java?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-752592.html

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn)),Java 數(shù)據(jù)結(jié)構(gòu)與算法篇,算法,java

?

文章目錄

? ? ? ? 1.0 單鏈表的反轉(zhuǎn)說明

? ? ? ? 2.0 單鏈表的創(chuàng)建

? ? ? ? 3.0 實(shí)現(xiàn)單鏈表反轉(zhuǎn)的五種方法

? ? ? ? 3.1?實(shí)現(xiàn)單鏈表反轉(zhuǎn) - 循環(huán)復(fù)制(迭代法)

? ? ? ? 3.2 實(shí)現(xiàn)單鏈表反轉(zhuǎn) -?頭插法

? ? ? ? 3.3?實(shí)現(xiàn)單鏈表反轉(zhuǎn) -?遞歸法

? ? ? ? 3.4?實(shí)現(xiàn)單鏈表反轉(zhuǎn) -?三指針法

? ? ? ? 3.5 實(shí)現(xiàn)單鏈表反轉(zhuǎn) - 第二種頭插法

? ? ? ? 4.0 實(shí)現(xiàn)單鏈表反轉(zhuǎn)的五種完整代碼


? ? ? ? 1.0 單鏈表的反轉(zhuǎn)說明

????????單鏈表的反轉(zhuǎn)是指將鏈表中的節(jié)點(diǎn)順序逆轉(zhuǎn),即原先的鏈表尾部變成了頭部,頭部變成了尾部。比如,[1,2,3,4,5,6,7] 將這個(gè)鏈表的值反轉(zhuǎn)得到的結(jié)果為:[7,6,5,4,3,2,1],需要注意的是,可以用值打印出來會(huì)更好觀察鏈表反轉(zhuǎn)后的結(jié)果。

? ? ? ? 2.0 單鏈表的創(chuàng)建

? ? ? ? 具體的創(chuàng)建思路:首先要把節(jié)點(diǎn)進(jìn)行封裝成單獨(dú)的類,該類中的成員包括:int value 存放值Node next 引用下一個(gè)節(jié)點(diǎn)。由于該節(jié)點(diǎn)類為鏈表中的一個(gè)組成部分,因此,將該類設(shè)為靜態(tài)內(nèi)部類,外部類的成員為哨兵節(jié)點(diǎn)。

代碼如下:

import java.util.Iterator;

public class Linked implements Iterable<Integer>{
    private final Node hand;
    private int size;
    static class Node {
        public int value;
        public Node next;

        public Node(int value, Node next) {
            this.value = value;
            this.next = next;
        }
    }

    public Linked() {
        hand = new Node(0,null);
    }

    public void addLast (int value) {
        Node p = hand;
        while (p.next != null) {
            p = p.next;
        }
        p.next = new Node(value, null);
        size++;
    }
    public void addFirst(int value) {
        hand.next = new Node(value,hand.next);
        size++;
    }

    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            Node p = hand.next;

            @Override
            public boolean hasNext() {

                return p != null;
            }

            @Override
            public Integer next() {
                int k = p.value;
                p = p.next;
                return k;
            }
        };

    }

}

? ? ? ? 為了方便對(duì)反轉(zhuǎn)的五種方法進(jìn)行講解,實(shí)現(xiàn)了以上的頭插節(jié)點(diǎn)、尾插節(jié)點(diǎn)、用迭代器循環(huán)節(jié)點(diǎn)的值。

本篇重點(diǎn)是反轉(zhuǎn)的五種的方法,所以對(duì)以上的實(shí)現(xiàn)的 API 不太了解的話,點(diǎn)擊以下鏈接去了解一下:? ?Java 數(shù)據(jù)結(jié)構(gòu)篇-實(shí)現(xiàn)單鏈表核心API-CSDN博客

????????3.0 實(shí)現(xiàn)單鏈表反轉(zhuǎn)的五種方法

????????迭代法:遍歷鏈表,依次改變節(jié)點(diǎn)的指針方向,使其指向前一個(gè)節(jié)點(diǎn)。

????????遞歸法:利用遞歸函數(shù),先反轉(zhuǎn)后續(xù)節(jié)點(diǎn),然后再將當(dāng)前節(jié)點(diǎn)的指針指向前一個(gè)節(jié)點(diǎn)。

????????頭插法:從頭到尾遍歷原鏈表,依次將每個(gè)節(jié)點(diǎn)插入到新鏈表的頭部,形成新的反轉(zhuǎn)鏈表。

????????:利用棧的特性,將鏈表節(jié)點(diǎn)依次入棧,然后依次出棧構(gòu)建新的反轉(zhuǎn)鏈表。

????????三指針法:使用三個(gè)指針分別指向當(dāng)前節(jié)點(diǎn)、前一個(gè)節(jié)點(diǎn)和后一個(gè)節(jié)點(diǎn),依次改變節(jié)點(diǎn)的指針方向,實(shí)現(xiàn)鏈表的反轉(zhuǎn)。

? ? ? ? 3.1?實(shí)現(xiàn)單鏈表反轉(zhuǎn) - 循環(huán)復(fù)制(迭代法)

? ? ? ? 思路為:遍歷舊的鏈表來取得每個(gè)節(jié)點(diǎn)的對(duì)應(yīng)的值,然后新鏈表根據(jù)得到的值來創(chuàng)建節(jié)點(diǎn)進(jìn)行頭插節(jié)點(diǎn),這樣就實(shí)現(xiàn)了鏈表反轉(zhuǎn)了。需要注意的是,這個(gè)方法并沒有改變舊鏈表

代碼如下:

    //方法一: 循環(huán)復(fù)制
    public Linked reverseMethod1 (Linked linked) {
        Linked linked1 = new Linked();
        for (Integer integer : linked) {
            linked1.addFirst(integer);
        }
        return linked1;
    }

? ? ? ? 分析以上代碼:先創(chuàng)建一個(gè)新鏈表 linked1 然后調(diào)用頭插節(jié)點(diǎn)的方法,通過傳入舊節(jié)點(diǎn)的值來創(chuàng)建對(duì)象,也就是節(jié)點(diǎn)。需要注意的是,這里的增強(qiáng) for 循環(huán)是已經(jīng)實(shí)現(xiàn)了。

? ? ? ? 3.2 實(shí)現(xiàn)單鏈表反轉(zhuǎn) -?頭插法

? ? ? ? 通過改變舊節(jié)點(diǎn)的節(jié)點(diǎn)指向來實(shí)現(xiàn)鏈表反轉(zhuǎn),當(dāng)反轉(zhuǎn)結(jié)束之后,舊的鏈表順序就會(huì)被改變。具體思路:先要對(duì)舊節(jié)點(diǎn)的 hand.next 頭節(jié)點(diǎn)從該鏈表獨(dú)立出來,對(duì)于舊鏈表來說就是刪除頭節(jié)點(diǎn),不過要記錄要?jiǎng)h除的節(jié)點(diǎn),得到這個(gè)頭節(jié)點(diǎn)之后,該節(jié)點(diǎn)頭插到新的鏈表中,一直循環(huán)往復(fù)下去,直到 hand.next == null 結(jié)束循環(huán)。

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn)),Java 數(shù)據(jù)結(jié)構(gòu)與算法篇,算法,java

? ? ? ? 對(duì)于這個(gè)鏈表來說,這就可以把 remove 這個(gè)節(jié)點(diǎn)刪除了,也為頭刪節(jié)點(diǎn)。當(dāng) hand.next = null 就說明了沒有節(jié)點(diǎn)了,就應(yīng)該結(jié)束循環(huán)了。

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn)),Java 數(shù)據(jù)結(jié)構(gòu)與算法篇,算法,java

? ? ? ? 這就是頭插節(jié)點(diǎn)的流程。

代碼如下:

    //方法二: 改變舊節(jié)點(diǎn)的指向
    public Linked reverseMethod2(Linked linked) {

        Linked linkedNew = new Linked();
        Node handNew = linkedNew.hand;
        while (hand.next != null) {

            //先頭刪
            Node temp = linked.hand.next;
            linked.hand.next = temp.next;
            //再頭插
            Node tp = handNew.next;
            handNew.next = temp;
            temp.next = tp;
        }
        return linkedNew;
    }

對(duì)以上代碼進(jìn)行分析:

? ? ? ? ?先創(chuàng)建一個(gè)新的鏈表,在刪除頭節(jié)點(diǎn)前,需要將要?jiǎng)h除的節(jié)點(diǎn)記錄起來,如果一個(gè)對(duì)象沒被引用就會(huì)被 JVM 自動(dòng)回收,然后頭節(jié)點(diǎn)指向刪除節(jié)點(diǎn)的指向下一個(gè)的節(jié)點(diǎn)。頭插節(jié)點(diǎn)前,需要將 hand.next 同樣要記錄,然后頭節(jié)點(diǎn)指向新的節(jié)點(diǎn),新的節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn),正就是原先的 hand.next 。

? ? ? ? 3.3?實(shí)現(xiàn)單鏈表反轉(zhuǎn) -?遞歸法

? ? ? ? ?思路:通過遞歸這種方式,先遞出到 “底” ,得到舊鏈表的最后一個(gè)節(jié)點(diǎn),所以遞歸結(jié)束的條件也就是 temp.next == null,返回該節(jié)點(diǎn) temp 也就是最后的節(jié)點(diǎn)。遞歸的函數(shù)也很容易可以想出來為:?調(diào)用自己的方法名(node.next) 。

代碼如下:

    //方法三: 遞歸
    public Linked reverseMethod3(Linked linked) {
        Linked linked1 = new Linked();
        linked1.hand.next = reversion(linked.hand.next);
        return linked1;
    }

    public Node reversion (Node node) {
        if (node == null || node.next == null) {
            return node;
        }
        Node last = reversion(node.next);
        node.next.next = node;
        node.next = null;
        return last;
    }

? ? ? ? 對(duì)以上代碼進(jìn)行分析:先創(chuàng)建一個(gè)新的鏈表 linkded1 ,調(diào)用 reversion()??這個(gè)方法來得到頭節(jié)點(diǎn)。具體來看是如何得到頭節(jié)點(diǎn),顯而易見,就是通過遞歸,遞到底(到盡頭)取到最后一個(gè)節(jié)點(diǎn),然后將這個(gè)尾節(jié)點(diǎn)一直返回出來,OK,這里就拿到了新鏈表的頭節(jié)點(diǎn)了。接下來要考慮的是,如何將剩下的節(jié)點(diǎn)反轉(zhuǎn)呢?

?先來看看遞歸的流程圖:

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn)),Java 數(shù)據(jù)結(jié)構(gòu)與算法篇,算法,java

? ? ?

分析如下:??

????????假設(shè)有五個(gè)節(jié)點(diǎn),在遞歸回歸的過程中,需要做的事第五個(gè)節(jié)點(diǎn)指向第四個(gè)節(jié)點(diǎn),第四個(gè)節(jié)點(diǎn)指向第三個(gè)節(jié)點(diǎn)...一直下去,這樣是不是就實(shí)現(xiàn)了每個(gè)節(jié)點(diǎn)指向都反轉(zhuǎn)了。但是需要注意的是,當(dāng)?shù)诙€(gè)節(jié)點(diǎn)指向第一個(gè)節(jié)點(diǎn),這里都沒有問題,我們很容易會(huì)忽略,第一個(gè)節(jié)點(diǎn)原先就指向第二個(gè)節(jié)點(diǎn),因此,會(huì)出現(xiàn)死循環(huán),解決辦法:先暫時(shí)將被指向的節(jié)點(diǎn)賦值為:null ,這樣就完美解決了。

? ? ? ? 3.4?實(shí)現(xiàn)單鏈表反轉(zhuǎn) -?三指針法

? ? ? ? 實(shí)現(xiàn)思路:在原先鏈表中進(jìn)行改變每個(gè)節(jié)點(diǎn)的引用,先定義出三個(gè)變量分別為 o1,o2,n1,一開始的時(shí)候 o1 , n1指向鏈表中的 hand?頭節(jié)點(diǎn)(先來搞定沒有哨兵的鏈表),對(duì)于 o2 指向 hand.next 。接下來就可以開始移動(dòng) o2,n1 這個(gè)兩個(gè)指針了,主要的是 o1 保持不變,永遠(yuǎn)指向 hand 節(jié)點(diǎn),先讓 hand.next = o2.next ,這個(gè)意思就是將 hand.next 的頭節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)從鏈表中移出,然后將移出來的節(jié)點(diǎn)指向 n1 ,最后 o2 = n1 將 n1 賦值給 o2 ,o2 再接著指向 hand.next 的節(jié)點(diǎn)。

幾個(gè)簡(jiǎn)單的過程:

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn)),Java 數(shù)據(jù)結(jié)構(gòu)與算法篇,算法,java

代碼如下:

    //方法四:雙引用
    public Linked reverseMethod4(Linked linked) {
        linked.hand.next = dualPointers(linked.hand.next);
        return linked;
    }

    public Node dualPointers(Node hand) {
        Node o1 = hand;
        Node n1 = hand;
        Node o2 = o1.next;
        while (o2 != null) {
            o1.next = o2.next;
            o2.next = n1;
            n1 = o2;
            o2 = o1.next;
        }
        return n1;
    }

????????通過以上的簡(jiǎn)單幾個(gè)過程且結(jié)合代碼來分析,應(yīng)該會(huì)有一點(diǎn)點(diǎn)感覺,來總結(jié)以下,對(duì)于 o1 的動(dòng)作就是站在 hand 節(jié)點(diǎn)中 "一動(dòng)不動(dòng)", 對(duì)于 o2 可以將它看作搬運(yùn)工,不斷搬運(yùn) hand.next 的節(jié)點(diǎn)運(yùn)到 n1 節(jié)點(diǎn)的前面(n1 的左邊),具體就是先要將 o2.next 節(jié)點(diǎn)被 hand.next 引用,接著就是搬運(yùn)了, o2.next 指向 n1 的節(jié)點(diǎn),然后 n1 需要往后跳一格(往左邊移動(dòng)一個(gè)節(jié)點(diǎn))即將 o2 賦值給 n1,然后 o2 就返回去指向 o1.next 的節(jié)點(diǎn)了,循環(huán)往復(fù)下去,直到當(dāng) o1.next == null 時(shí),就該結(jié)束循環(huán)了

? ? ? ? 3.5 實(shí)現(xiàn)單鏈表反轉(zhuǎn) - 第二種頭插法

? ? ? ? 思路:遍歷舊鏈表的每一個(gè)節(jié)點(diǎn),然后直接插入到新鏈表中,這個(gè)方法個(gè)第一種頭插很相似,區(qū)別就是第一種頭插的方法是面向?qū)ο缶幊痰?,第二種頭插的方法是面向過程來編程的。

代碼如下:

    //方法五:
    public Linked reverseMethod5(Linked linked) {
        Node o1 = linked.hand.next;
        Linked linked1 = new Linked();
        Node n1 = null;
        while (o1 != null) {
            Node temp = o1.next;
            o1.next = n1;
            n1 = o1;
            o1 = temp;
        }
       linked1.hand.next = n1;
        return linked1;
    }

? ? ? ? 這里也運(yùn)用到了頭刪還有頭插,跟之前的頭插有所不同,這里的頭插是將插入進(jìn)來的節(jié)點(diǎn)變成為新鏈表的頭節(jié)點(diǎn),直到遍歷結(jié)束為止。

? ? ? ? 4.0 實(shí)現(xiàn)單鏈表反轉(zhuǎn)的五種完整代碼

import java.util.Iterator;

public class Linked implements Iterable<Integer>{
    public Node hand;
    private int size;
    static class Node {
        public int value;
        public Node next;

        public Node(int value, Node next) {
            this.value = value;
            this.next = next;
        }
    }

    public Linked() {
        hand = new Node(0,null);
    }

    public void addLast (int value) {
        Node p = hand;
        while (p.next != null) {
            p = p.next;
        }
        p.next = new Node(value, null);
        size++;
    }
    public void addFirst(int value) {
        hand.next = new Node(value,hand.next);
        size++;
    }

    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            Node p = hand.next;

            @Override
            public boolean hasNext() {

                return p != null;
            }

            @Override
            public Integer next() {
                int k = p.value;
                p = p.next;
                return k;
            }
        };

    }



    //方法一: 循環(huán)復(fù)制
    public Linked reverseMethod1 (Linked linked) {
        Linked linked1 = new Linked();
        for (Integer integer : linked) {
            linked1.addFirst(integer);
        }
        return linked1;
    }

    //方法二: 改變舊節(jié)點(diǎn)的指向
    public Linked reverseMethod2(Linked linked) {

        Linked linkedNew = new Linked();
        Node handNew = linkedNew.hand;
        while (hand.next != null) {

            //先頭刪
            Node temp = linked.hand.next;
            linked.hand.next = temp.next;
            //再頭插
            Node tp = handNew.next;
            handNew.next = temp;
            temp.next = tp;
        }
        return linkedNew;
    }

    //方法三: 遞歸
    public Linked reverseMethod3(Linked linked) {
        Linked linked1 = new Linked();
        linked1.hand.next = reversion(linked.hand.next);
        return linked1;
    }

    public Node reversion (Node node) {
        if (node == null || node.next == null) {
            return node;
        }
        Node last = reversion(node.next);
        node.next.next = node;
        node.next = null;
        return last;
    }

    //方法四:雙引用
    public Linked reverseMethod4(Linked linked) {
        linked.hand.next = dualPointers(linked.hand.next);
        return linked;
    }

    public Node dualPointers(Node hand) {
        Node o1 = hand;
        Node n1 = hand;
        Node o2 = o1.next;
        while (o2 != null) {
            o1.next = o2.next;
            o2.next = n1;
            n1 = o2;
            o2 = o1.next;
        }
        return n1;
    }

    //方法五:
    public Linked reverseMethod5(Linked linked) {
        Node o1 = linked.hand.next;
        Linked linked1 = new Linked();
        Node n1 = null;
        while (o1 != null) {
            Node temp = o1.next;
            o1.next = n1;
            n1 = o1;
            o1 = temp;
        }
       linked1.hand.next = n1;
        return linked1;
    }

}

Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn)),Java 數(shù)據(jù)結(jié)構(gòu)與算法篇,算法,java

?

到了這里,關(guān)于Java 算法篇-深入了解單鏈表的反轉(zhuǎn)(實(shí)現(xiàn):用 5 種方式來具體實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    正如標(biāo)題所說,本文會(huì)圖文詳細(xì)解析三道單鏈表OJ題,分別為: ?反轉(zhuǎn)鏈表 (簡(jiǎn)單) ?鏈表的中間節(jié)點(diǎn) (簡(jiǎn)單) ?鏈表的回文結(jié)構(gòu) (較難) 把他們放在一起講的原因是: ?反轉(zhuǎn)鏈表 和 ?鏈表的中間節(jié)點(diǎn) 是 ?鏈表的回文結(jié)構(gòu) 的基礎(chǔ) 為什么這樣說?請(qǐng)往下看: 目錄 1. 反轉(zhuǎn)鏈

    2024年02月13日
    瀏覽(104)
  • Java LeetCode篇-深入了解二叉樹的經(jīng)典解法(多種方式實(shí)現(xiàn):構(gòu)造二叉樹)

    Java LeetCode篇-深入了解二叉樹的經(jīng)典解法(多種方式實(shí)現(xiàn):構(gòu)造二叉樹)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? ??? 文章目錄 ????????1.0 從前序與中序遍歷序列來構(gòu)造二叉樹 ? ? ? ? 1.1 實(shí)現(xiàn)從前序與中序遍歷序列來構(gòu)造二叉樹思路? ? ? ? ? ? 1.2 代碼實(shí)現(xiàn)從前序與中序遍歷序列來構(gòu)造二叉樹 ? ? ? ? 2.0 從中序

    2024年02月05日
    瀏覽(23)
  • Java LeetCode篇-深入了解二叉樹經(jīng)典解法(三種方式實(shí)現(xiàn):獲取二叉樹的最大深度)

    Java LeetCode篇-深入了解二叉樹經(jīng)典解法(三種方式實(shí)現(xiàn):獲取二叉樹的最大深度)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? ?? 文章目錄 ? ? ? ? 1.0 對(duì)稱二叉樹 ????????1.1 判斷對(duì)稱二叉樹實(shí)現(xiàn)思路 ????????1.2 代碼實(shí)現(xiàn):判斷對(duì)稱二叉樹 ? ? ? ? 2.0 二叉樹的最大深度 ????????2.1 使用遞歸實(shí)現(xiàn)獲取二叉樹的最大深度思

    2024年02月05日
    瀏覽(29)
  • 【一起學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】快速教你了解并實(shí)現(xiàn)單鏈表

    【一起學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】快速教你了解并實(shí)現(xiàn)單鏈表

    此篇是對(duì)單鏈表知識(shí)的學(xué)習(xí)和實(shí)現(xiàn),基本上大體的方法實(shí)現(xiàn)和思路都已經(jīng)表達(dá),如果有不對(duì)的地方,還請(qǐng)各位大佬多多指教! 單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲(chǔ)單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來表示的,每個(gè)結(jié)點(diǎn)的構(gòu)成:元素

    2024年02月19日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)上機(jī)練習(xí)——單鏈表的基本操作、頭文件、類定義、main函數(shù)、多種鏈表算法的實(shí)現(xiàn),含注釋

    數(shù)據(jù)結(jié)構(gòu)上機(jī)練習(xí)——單鏈表的基本操作、頭文件、類定義、main函數(shù)、多種鏈表算法的實(shí)現(xiàn),含注釋

    ??頭文件和源文件分開有很多好處:可以提高編譯速度、提高代碼的可維護(hù)性、提高代碼的可重用性和可擴(kuò)展性,同時(shí)也可以使代碼結(jié)構(gòu)更清晰,方便代碼的管理和維護(hù)。 LinkList.h test.cpp ????????????? ?? (下面所有函數(shù)都默認(rèn)在類中實(shí)現(xiàn)) ??我們以

    2024年02月07日
    瀏覽(98)
  • 單鏈表反轉(zhuǎn)(逆置)——(四種方法實(shí)現(xiàn))

    單鏈表反轉(zhuǎn)(逆置)——(四種方法實(shí)現(xiàn))

    鏈表逆置就是把最后一個(gè)數(shù)據(jù)提到最前面,倒數(shù)第二個(gè)放到第二個(gè)……依次類推,直到第一個(gè)到最后一個(gè)。 由于鏈表沒有下標(biāo),所以不能借助下標(biāo)來實(shí)行數(shù)據(jù)的逆置,要靠空間的轉(zhuǎn)移來完成鏈表的逆置,這里采用沒有頭節(jié)點(diǎn)的鏈表來實(shí)現(xiàn)逆置。 第一種——頭插法 算法思想:

    2024年02月11日
    瀏覽(43)
  • 速學(xué)數(shù)據(jù)結(jié)構(gòu) | 手把手教你會(huì)單鏈表的構(gòu)建方式

    速學(xué)數(shù)據(jù)結(jié)構(gòu) | 手把手教你會(huì)單鏈表的構(gòu)建方式

    ?? 鴿芷咕 :個(gè)人主頁(yè) ??? 個(gè)人專欄 : 《初階數(shù)據(jù)結(jié)構(gòu)》《C語言進(jìn)階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好??!今天給大家?guī)淼氖浅蹼A數(shù)據(jù)結(jié)構(gòu)中單鏈表的構(gòu)建方式,手把手教會(huì)你單鏈表 ! ?? ?? 鏈表是指一種邏輯上是連在一

    2024年02月08日
    瀏覽(156)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的排序算法(選擇,冒泡,遞歸)

    【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的排序算法(選擇,冒泡,遞歸)

    目錄 選擇排序 冒泡排序 快速排序 合并兩條鏈表并排序 選擇排序 鏈表的選擇排序思想與數(shù)組的排序類似,但是鏈表需要先找到里面最小或者最大的值,然后將這個(gè)值用改鏈語句進(jìn)行操作 我們先看這個(gè)改鏈語句的操作(min是筆者打錯(cuò)了應(yīng)該是max,但是圖已經(jīng)畫好了就沒有改)

    2024年02月04日
    瀏覽(32)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的插入和刪除

    ?? 本文由 程序喵正在路上 原創(chuàng),CSDN首發(fā)! ?? 系列專欄: 數(shù)據(jù)結(jié)構(gòu)與算法 ?? 首發(fā)時(shí)間:2022年9月21日 ?? 歡迎關(guān)注??點(diǎn)贊??收藏??留言?? ?? 一以貫之的努力 不得懈怠的人生 眾所周知,順序表中的每個(gè)結(jié)點(diǎn)中只存放數(shù)據(jù)元素,其優(yōu)缺點(diǎn)為: 優(yōu)點(diǎn):可隨機(jī)存取,存儲(chǔ)

    2024年02月07日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的增刪查改(附源碼)

    【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的增刪查改(附源碼)

    ? 這么可愛的貓貓不值得點(diǎn)個(gè)贊嗎 ???? 目錄 一.鏈表的概念和結(jié)構(gòu) 二.單鏈表的邏輯結(jié)構(gòu)和物理結(jié)構(gòu) 1.邏輯結(jié)構(gòu) ?2.物理結(jié)構(gòu) 三.結(jié)構(gòu)體的定義 四.增加 1.尾插? ?SListpushback 2.頭插? SListpushfront 五.刪除 1.尾刪? SListpopback 2.頭刪? SListpopfront 六.查找? 插入? 釋放? ?打印 1.查找

    2024年02月02日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包