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

【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu)

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

??引言

單鏈表的操作算法是筆試面試中較為常見的題目。
本文將著重介紹平時(shí)面試中常見的關(guān)于鏈表的應(yīng)用題目,馬上要進(jìn)行秋招了。希望對(duì)你們有幫助 _??
【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,回文結(jié)構(gòu),java

??鏈表的回文結(jié)構(gòu)

【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,回文結(jié)構(gòu),java

????題目描述:

對(duì)于一個(gè)鏈表,請(qǐng)?jiān)O(shè)計(jì)一個(gè)時(shí)間復(fù)雜度為O(n),額外空間復(fù)雜度為O(1)的算法,判斷其是否為回文結(jié)構(gòu)。

給定一個(gè)鏈表的頭指針A,請(qǐng)返回一個(gè)bool值,代表其是否為回文結(jié)構(gòu)。保證鏈表長(zhǎng)度小于等于900。

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class PalindromeList {
    public boolean chkPalindrome(ListNode A) {
         // write code here
    }
}

????示例:

給定鏈表:11->22->33->22->11
返回值:true

????思路解析:

回文字符串的中間節(jié)點(diǎn)兩邊的元素,如果從兩頭兩中間進(jìn)行比對(duì)的話,每一個(gè)里面的元素完全相同
【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,回文結(jié)構(gòu),java

??????尋找中間節(jié)點(diǎn)

我們先尋找到中間節(jié)點(diǎn),然后將中間節(jié)點(diǎn)后的鏈表部分進(jìn)行局部偏轉(zhuǎn)

尋找中間節(jié)點(diǎn)時(shí)用我們快慢指針的思想

fast:快指針,一次走兩步
slow:慢指針,一次走一步
結(jié)束條件:
鏈表元素個(gè)數(shù)為偶數(shù)時(shí):fast.next == null;
鏈表元素個(gè)數(shù)為奇數(shù)時(shí):fast == null;
【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,回文結(jié)構(gòu),java

尋找中間節(jié)點(diǎn)代碼如下

ListNode fast = A;
        ListNode slow = A;
        //找中間節(jié)點(diǎn)
        while(fast != null||fast.next != null) {
            //快指針,一次走兩步
            fast = fast.next.next;
            //慢指針,一次走一步
            slow = slow.next;
        }

??????局部翻轉(zhuǎn)

接下來我們要對(duì)局部進(jìn)行翻轉(zhuǎn)

翻轉(zhuǎn)單鏈表,我們首先設(shè)一個(gè)cur節(jié)點(diǎn)為我們當(dāng)前所需要翻轉(zhuǎn)的節(jié)點(diǎn);還有一個(gè)curNext記錄cur下一節(jié)點(diǎn)

翻轉(zhuǎn)時(shí):

  • 先用curNext記錄cur下一節(jié)點(diǎn)的位置
  • 然后將cur.next置為slow,讓cur節(jié)點(diǎn)指向slow
  • 再將cur節(jié)點(diǎn)設(shè)為slow
  • 最后讓cur置為curNext,進(jìn)行下一節(jié)點(diǎn)的翻轉(zhuǎn)
    【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,回文結(jié)構(gòu),java
    結(jié)束條件:cur == null;

代碼實(shí)現(xiàn)如下

  ListNode cur = slow.next;
        //局部翻轉(zhuǎn)
        while( cur != null) {
            ListNode curNext = cur.next;
            cur.next = slow;
            slow = cur;
            cur = curNext;
        }

??????判斷是否回文

接下來我們就要判斷是否回文

判斷思想:

  • A節(jié)點(diǎn)與slow節(jié)點(diǎn)同時(shí)向中間節(jié)點(diǎn)進(jìn)行遍歷
  • 對(duì)比其中元素是否相等
  • 不相等返回false,相等則繼續(xù)遍歷,直到結(jié)束

結(jié)束條件:

  • 當(dāng)鏈表中節(jié)點(diǎn)數(shù)為奇數(shù)時(shí),這時(shí)候A與slow會(huì)相遇,指向同一位置
  • 所以條件為A == slow;
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,回文結(jié)構(gòu),java
  • 當(dāng)鏈表中節(jié)點(diǎn)為偶數(shù)時(shí),這時(shí)候A與slow是不會(huì)相遇的
  • 但是如果兩邊都遍歷完,A的下一節(jié)點(diǎn)指向的肯定是slow
  • 所以條件為A.next == slow;
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,回文結(jié)構(gòu),java

代碼實(shí)現(xiàn)如下:

//判斷是否回文
        while(slow != A&& A.next != slow) {
            if(slow.val != A.val) {
                return false;
            }
            slow = slow.next;
            A = A.next;
        }
        return true;

????完整代碼與注意事項(xiàng)

??????注意事項(xiàng):

  • 結(jié)束條件不是循環(huán)的條件,不要搞混,不然進(jìn)不去循環(huán)??
  • 要注意對(duì)傳進(jìn)來的數(shù)據(jù)進(jìn)行判斷與篩選

??????完整代碼

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class PalindromeList {
    public boolean chkPalindrome(ListNode A) {
        
        ListNode fast = A;
        ListNode slow = A;
        //找中間節(jié)點(diǎn)
        while(fast != null&&fast.next != null) {
            //快指針,一次走兩步
            fast = fast.next.next;
            //慢指針,一次走一步
            slow = slow.next;
        }
        ListNode cur = slow.next;
        //局部翻轉(zhuǎn)
        while( cur != null) {
            ListNode curNext = cur.next;
            cur.next = slow;
            slow = cur;
            cur = curNext;
        }
        //判斷是否回文
        while(slow != A&& A.next != slow) {
            if(slow.val != A.val) {
                return false;
            }
            slow = slow.next;
            A = A.next;
        }
        return true;
    }
}

?總結(jié)

關(guān)于《【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu)》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評(píng)指正,如果文章對(duì)您有幫助或者覺得作者寫的還不錯(cuò)可以點(diǎn)一下關(guān)注,點(diǎn)贊,收藏支持一下!文章來源地址http://www.zghlxwxcb.cn/news/detail-661961.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(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)文章

  • 鏈表的回文結(jié)構(gòu)

    對(duì)于一個(gè)鏈表,請(qǐng)?jiān)O(shè)計(jì)一個(gè)時(shí)間復(fù)雜度為O(n),額外空間復(fù)雜度為O(1)的算法,判斷其是否為回文結(jié)構(gòu)。給定一個(gè)鏈表的頭指針 A ,請(qǐng)返回一個(gè)bool值,代表其是否為回文結(jié)構(gòu)。保證鏈表長(zhǎng)度小于等于900。 測(cè)試樣例: 1-2-2-1 返回:true 題目鏈接:鏈表的回文結(jié)構(gòu)_??皖}霸_??途W(wǎng)?

    2024年02月06日
    瀏覽(15)
  • 【nowcoder】鏈表的回文結(jié)構(gòu)

    【nowcoder】鏈表的回文結(jié)構(gòu)

    ??皖}目鏈接 鏈表的回文結(jié)構(gòu)

    2024年01月24日
    瀏覽(16)
  • 【鏈表OJ題 6】鏈表的回文結(jié)構(gòu)

    【鏈表OJ題 6】鏈表的回文結(jié)構(gòu)

    目錄 題目來源: 代碼實(shí)現(xiàn): 思路分析: 實(shí)現(xiàn)過程: 鏈表的回文結(jié)構(gòu)_牛客題霸_??途W(wǎng) (nowcoder.com) 題目描述: 本題的難點(diǎn)在于時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。 因?yàn)榛匚慕Y(jié)構(gòu)是正著讀反著讀是一樣的,因此我們 找到鏈表的中間結(jié)點(diǎn),然后從中間節(jié)點(diǎn)開始逆置到尾結(jié)點(diǎn),

    2024年02月06日
    瀏覽(17)
  • LeetCode_鏈表的回文結(jié)構(gòu)

    LeetCode_鏈表的回文結(jié)構(gòu)

    ??所屬專欄:LeetCode刷題專欄?? ??作者主頁:嶔某?? 對(duì)于一個(gè)鏈表,請(qǐng)?jiān)O(shè)計(jì)一個(gè)時(shí)間復(fù)雜度為O(n),額外空間復(fù)雜度為O(1)的算法,判斷其是否為回文結(jié)構(gòu)。給定一個(gè)鏈表的頭指針A,請(qǐng)返回一個(gè)bool值,代表其是否為回文結(jié)構(gòu)。保證鏈表長(zhǎng)度小于等于900。 就比如:1-2-3

    2024年04月26日
    瀏覽(18)
  • 鏈表分割,鏈表的回文結(jié)構(gòu)等經(jīng)典例題解析!

    鏈接: 鏈表分割_牛客題霸_??途W(wǎng) (nowcoder.com) https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8tqId=11004rp=2ru=/activity/ojqru=/ta/cracking-the-coding-interview/question-ranking public class Partition { ? ? public ListNode partition(ListNode pHead, int x) { ? ? ? ? ListNode cur = pHead; ? ? ? ? ListNode bs =

    2024年02月19日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表的分類和雙向鏈表

    【數(shù)據(jù)結(jié)構(gòu)】鏈表的分類和雙向鏈表

    本篇是基于上篇單鏈表所作,推薦與上篇配合閱讀,效果更加 http://t.csdnimg.cn/UhXEj 鏈表的結(jié)構(gòu)非常多樣,以下情況組合起來就有8種(2 x 2 x 2)鏈表結(jié)構(gòu): 我們一般叫這個(gè)頭為哨兵位 我們上回講的單鏈表就是不帶頭單項(xiàng)不循環(huán)鏈表。 今天我們要講帶頭雙向循環(huán)的鏈表。 不過

    2024年01月25日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)-二叉鏈表的結(jié)構(gòu)與實(shí)現(xiàn)

    目錄 一、引言 二、什么是二叉鏈表 三、二叉鏈表的結(jié)構(gòu) 四、二叉鏈表的實(shí)現(xiàn) 1. 創(chuàng)建二叉鏈表 2. 遍歷二叉鏈表 3. 插入節(jié)點(diǎn) 4. 刪除節(jié)點(diǎn) 五、應(yīng)用場(chǎng)景 六、總結(jié) 七、代碼示例 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)科學(xué)中的重要概念,它是計(jì)算機(jī)程序設(shè)計(jì)的基礎(chǔ)。二叉鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu)

    2024年02月08日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)----鏈表介紹、模擬實(shí)現(xiàn)鏈表、鏈表的使用

    數(shù)據(jù)結(jié)構(gòu)----鏈表介紹、模擬實(shí)現(xiàn)鏈表、鏈表的使用

    ArrayList底層使用連續(xù)的空間,任意位置插入或刪除元素時(shí),需要將該位置后序元素整體往前或者往后搬移,故時(shí)間復(fù)雜度為O(N) 增容需要申請(qǐng)新空間,拷貝數(shù)據(jù),釋放舊空間。會(huì)有不小的消耗。 增容一般是呈2倍的增長(zhǎng),勢(shì)必會(huì)有一定的空間浪費(fèi)。例如當(dāng)前容量為100,滿了以后

    2024年02月21日
    瀏覽(18)
  • 【Leetcode】反轉(zhuǎn)鏈表 合并鏈表 相交鏈表 鏈表的回文結(jié)構(gòu)

    【Leetcode】反轉(zhuǎn)鏈表 合并鏈表 相交鏈表 鏈表的回文結(jié)構(gòu)

    ? 目錄 一.【Leetcode206】反轉(zhuǎn)鏈表 1.鏈接 2.題目再現(xiàn) ?3.解法A:三指針法 二.【Leetcode21】合并兩個(gè)有序鏈表 1.鏈接 2.題目再現(xiàn) ?3.三指針尾插法 三.【Leetcode160】相交鏈表 1.鏈接 2.題目再現(xiàn) 3.解法 四.鏈表的回文結(jié)構(gòu) 1.鏈接 2.題目再現(xiàn) ?3.解法 1.鏈接 反轉(zhuǎn)鏈表 2.題目再現(xiàn) ?3.解法

    2024年02月02日
    瀏覽(21)
  • 【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實(shí)現(xiàn)】

    【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實(shí)現(xiàn)】

    注意: 這里的 “帶頭” 跟前面我們說的 “頭節(jié)點(diǎn)” 是兩個(gè)概念,實(shí)際前面的在單鏈表階段稱呼不嚴(yán) 謹(jǐn),但是為了同學(xué)們更好的理解就直接稱為單鏈表的頭節(jié)點(diǎn)。 帶頭鏈表里的頭節(jié)點(diǎn),實(shí)際為 “哨兵位” ,哨兵位節(jié)點(diǎn)不存儲(chǔ)任何有效元素,只是站在這里“放哨 的” “哨

    2024年02月06日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包