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

【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表

這篇具有很好參考價值的文章主要介紹了【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法

??個人主頁: ?? 葉落閑庭
??我的專欄:??
c語言
數(shù)據(jù)結(jié)構(gòu)
javaEE
操作系統(tǒng)
Redis

石可破也,而不可奪堅;丹可磨也,而不可奪赤。

一、回文鏈表

1.1 題目描述

給你一個單鏈表的頭節(jié)點 head ,請你判斷該鏈表是否為回文鏈表。如果是,返回 true ;否則,返回 false 。


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法


1.2 思路分析

首先是要對該鏈表進(jìn)行非空校驗,若是空鏈表,直接返回fasle,否則,執(zhí)行其它邏輯,按照回文鏈表的規(guī)律,可以有這樣一個思路:若它是回文鏈表,可先找到他的前半個回文鏈表的最后一個節(jié)點,通過這個節(jié)點,就能找到開始回文的下半個鏈表的最后一個節(jié)點,從該節(jié)點處,將后半個回文鏈表進(jìn)行整體反轉(zhuǎn),然后再定義指針進(jìn)行遍歷,從前半個回文鏈表的頭開始作為p1指針,后半個回文鏈表的頭作為p2指針,遍歷整個回文鏈表,判斷它們的值是否相同,若不相同,則不是回文鏈表,否則就是回文鏈表。

1.3 代碼演示

public boolean isPalindrome(ListNode head) {
        //非空判斷
        if (head == null) {
            return false;
        }
        //找到回文鏈表前一段的最后一個節(jié)點
        ListNode firstHalfEnd = endOfFirstList(head);
        //找到回文鏈表反轉(zhuǎn)后的第一個節(jié)點
        ListNode firstHaftStart = reverse(firstHalfEnd.next);
        //設(shè)置標(biāo)記
        boolean result = true;
        //設(shè)置遍歷指針
        ListNode p1 = head;
        ListNode p2 = firstHalfStart;
        while(result && p2 != null) {
            if(p1.val != p2.val) {
                result = false;
            }
            p1 = p1.next;
            p2 = p2.next;
        }
        //恢復(fù)鏈表
        firstHaftEnd.next = reverse(firstHalfEnd.next);
        return result;
    }

    public static ListNode reverse(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode temp = curr.next;
            curr.next = prev;
            prev = curr;
            curr = temp;
        }
        return prev;
    }

    public static ListNode endOfFirstList(ListNode head) {
        //設(shè)置快慢指針進(jìn)行查找
        ListNode fast = head;
        ListNode slow = head;
        while (fast.next != null && fast.next.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }

二、環(huán)形鏈表

2.1 題目描述

給你一個鏈表的頭節(jié)點 head ,判斷鏈表中是否有環(huán)。
如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈>表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。注意:pos 不作為參數(shù)進(jìn)行傳遞 。僅僅是為了標(biāo)識鏈表的實際情況。
如果鏈表中存在環(huán) ,則返回 true 。 否則,返回 false 。


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法


2.2 思路分析

先進(jìn)行非空校驗,若head為null,字直接返回false,否則進(jìn)行其它代碼,定義快慢指針slow和fast,fast指針比slow指針快走兩步,while循環(huán)進(jìn)行遍歷,條件是slow不等于fast,遍歷整個鏈表,循環(huán)內(nèi)是快慢指針的執(zhí)行,當(dāng)鏈表存在環(huán)時,fast指針總會多轉(zhuǎn)幾圈從而追上慢指針slow,此時兩個指針均指向同一個節(jié)點,表示該鏈表存在環(huán),跳出循環(huán),返回true,若是在循環(huán)中fast指向了空或者fast.next指向了空,表示該鏈表是正常的單向鏈表,直接返回false即可。

2.3 代碼演示

public boolean hasCycle(ListNode head) {
        if (head == null) {
            return false;
        }
        ListNode fast = head.next;
        ListNode slow = head;
        while (slow != fast) {
            if (fast == null || fast.next == null) {
                return false;
            }
            //fast指針每次比slow指針快走兩步
            //若該鏈表存在環(huán),則這兩個指針會進(jìn)入環(huán)中
            //fast總有機會比slow多轉(zhuǎn)n圈從而追上slow
            //此時跳出循環(huán),表示該鏈表是環(huán)形來鏈表
            fast = fast.next.next;
            slow = slow.next;
        }
        return true;
    }

三、合并兩個有序鏈表

3.1 題目描述

將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法


【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表,# LeetCode 刷題,leetcode,鏈表,算法


3.2 思路分析

按照題目要求,可以先對空值進(jìn)行校驗,若兩個鏈表均為空,則直接返回空,若只有一個鏈表為空,則直接返回另一個鏈表,否則進(jìn)行其它代碼,定義一個哨兵節(jié)點并定義一個指向它的的指針,當(dāng)兩個鏈表均不為空時,以此為條件開始遍歷,在循環(huán)中判斷兩個鏈表當(dāng)前的節(jié)點值的大小情況,若鏈表1的值小,則將哨兵位的下一個節(jié)點指向鏈表1,否則,則將哨兵位的下一個節(jié)點指向鏈表2,然后prev指向prev.next繼續(xù)遍歷鏈表,循環(huán)結(jié)束時,若鏈表長度不等,則較長的鏈表直接將剩余的節(jié)點加到prev的next下,返回合并后的鏈表的頭節(jié)點,即哨兵位的下一個節(jié)點。文章來源地址http://www.zghlxwxcb.cn/news/detail-722976.html

3.3 代碼演示

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if(list1 == null && list2 == null) {
            return null;
        }
        if(list1 == null && list2 != null) {
            return list2;
        }
        if(list1 != null && list2 == null) {
            return list1;
        }
        //定義一個哨兵位節(jié)點
        ListNode preHead = new ListNode(-1);
        //定義一個指針指向哨兵位,作為遍歷指針
        ListNode prev = preHead;
        //當(dāng)鏈表都不為空時,開始遍歷
        while(list1 != null && list2 != null) {
            if(list1.val < list2.val) {     //遍歷鏈表,比較鏈表當(dāng)前節(jié)點的值的大小
                prev.next = list1;          //若鏈表1的值小,則將哨兵位的下一個節(jié)點指向鏈表1
                list1 = list1.next;         //鏈表1繼續(xù)遍歷
            } else {
                prev.next = list2;          //若鏈表2的值小,則將哨兵位的下一個節(jié)點指向鏈表2
                list2 = list2.next;         //鏈表2繼續(xù)遍歷
            }
            prev = prev.next;               //prev繼續(xù)遍歷鏈表
        }
        prev.next = list1 == null ? list2 : list1;  //若鏈表長度不等,則較長的鏈表直接將剩余的節(jié)點加到prev的next下即可
        return preHead.next;                        //返回合并后的鏈表的頭節(jié)點,即哨兵位的下一個節(jié)點
    }

到了這里,關(guān)于【力扣刷題】回文鏈表、環(huán)形鏈表、合并兩個有序鏈表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Leetcode刷題】鏈表的中間結(jié)點和合并兩個有序鏈表

    【Leetcode刷題】鏈表的中間結(jié)點和合并兩個有序鏈表

    生命如同寓言,其價值不在與長短,而在與內(nèi)容。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——塞涅卡 目錄 一.鏈表的中間結(jié)點 1.快慢指針 二.合并兩個有序鏈表? 1.尾插法 給你單鏈表的頭結(jié)點 head ,請你找出并返回鏈表的中間結(jié)點。 如果有兩個中間結(jié)點,則返回第二個中間結(jié)點

    2023年04月17日
    瀏覽(33)
  • 反轉(zhuǎn)鏈表、鏈表的中間結(jié)點、合并兩個有序鏈表【LeetCode刷題日志】

    反轉(zhuǎn)鏈表、鏈表的中間結(jié)點、合并兩個有序鏈表【LeetCode刷題日志】

    給你單鏈表的頭節(jié)點 head ,請你反轉(zhuǎn)鏈表,并返回反轉(zhuǎn)后的鏈表。 力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長平臺 這里解釋一下三個指針的作用: n1:記錄上一個節(jié)點,如果是第一個就指向空 n2:記錄此節(jié)點的位置 n3:記錄下一個節(jié)點的位置,讓翻轉(zhuǎn)后能找到下一個節(jié)點

    2024年02月03日
    瀏覽(24)
  • 【刷題筆記8.15】【鏈表相關(guān)】LeetCode:合并兩個有序鏈表、反轉(zhuǎn)鏈表

    【刷題筆記8.15】【鏈表相關(guān)】LeetCode:合并兩個有序鏈表、反轉(zhuǎn)鏈表

    將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。 輸入:l1 = [1,2,4], l2 = [1,3,4] 輸出:[1,1,2,3,4,4] 示例 2: 輸入:l1 = [], l2 = [] 輸出:[] 示例 3: 輸入:l1 = [], l2 = [0] 輸出:[0] 此題沒啥好說的,直接上代碼,自己好好分析

    2024年02月12日
    瀏覽(31)
  • 力扣刷題|L24. 兩兩交換鏈表中的節(jié)點 、L19.刪除鏈表的倒數(shù)第N個節(jié)點 、L面試題 02.07. 鏈表相交 、L142.環(huán)形鏈表II

    今天的刷題最大的收獲,便是學(xué)會了在群里跟大家進(jìn)行討論,這樣得到的答案,往往能更快的提高效率,希望自己能繼續(xù)堅持下去。 L24. 兩兩交換鏈表中的節(jié)點https://leetcode.cn/problems/swap-nodes-in-pairs/submissions/ 本題主要考慮雙指針法,也就是如何判斷虛擬節(jié)點不動的情況,這是

    2024年02月04日
    瀏覽(27)
  • 力扣刷題筆記-05 最長回文子串

    半山腰有點擁擠,你要去山頂看看。 什么是回文 從左邊出發(fā),字符的順序和從右邊出發(fā)是一樣的,比如aba,abba。那么基于這個理論,我們就可以想到解決方案: 找一個中心點,向兩邊出發(fā),左右兩邊各移動一位,如果相同就證明是回文子串,不相同就停止,找下一個中心點

    2024年02月08日
    瀏覽(26)
  • 【leetcode 力扣刷題】回文串相關(guān)題目(KMP、動態(tài)規(guī)劃)

    【leetcode 力扣刷題】回文串相關(guān)題目(KMP、動態(tài)規(guī)劃)

    題目鏈接:5. 最長回文子串 題目內(nèi)容: 題目就是要我們找s中的回文子串,還要是最長的。其實想想,暴力求解也行……就是遍歷所有的子串,同時判斷是不是回文串,是的話再和記錄的最大長度maxlen比較,如果更長就更新。時間復(fù)雜度直接變成O(n^3)。 優(yōu)化的點在于,假設(shè)子

    2024年02月09日
    瀏覽(27)
  • 兩個數(shù)組的交集(力扣刷題)

    兩個數(shù)組的交集(力扣刷題)

    ????????給定兩個數(shù)組? nums1 ?和? nums2 ?,返回? 它們的交集 ?。輸出結(jié)果中的每個元素一定是? 唯一 ?的。我們可以? 不考慮輸出結(jié)果的順序 ?。 來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/intersection-of-two-arrays ? 說明: ?輸出結(jié)果中的每個元素一定是唯一的。

    2023年04月09日
    瀏覽(25)
  • 力扣刷題-二叉樹-合并二叉樹

    力扣刷題-二叉樹-合并二叉樹

    合并二叉樹是操作兩棵樹的題目里面很經(jīng)典的,如何對兩棵樹遍歷以及處理? 給定兩個二叉樹,想象當(dāng)你將它們中的一個覆蓋到另一個上時,兩個二叉樹的一些節(jié)點便會重疊。 你需要將他們合并為一個新的二叉樹。合并的規(guī)則是如果兩個節(jié)點重疊,那么將他們的值相加作為

    2024年01月17日
    瀏覽(22)
  • 【leetcode 力扣刷題】匯總區(qū)間//合并區(qū)間//插入?yún)^(qū)間

    【leetcode 力扣刷題】匯總區(qū)間//合并區(qū)間//插入?yún)^(qū)間

    題目鏈接:228.匯總區(qū)間 題目內(nèi)容: 看題目真是沒懂這個題到底是要干啥……實際上題目要求的 恰好覆蓋數(shù)組中所有數(shù)字 的 最小有序 區(qū)間范圍列表,這個最小是指一個區(qū)間范圍小。比如能夠覆蓋{2,3,4,6}的區(qū)間可以是[2,6],但是5在區(qū)間內(nèi),卻不在數(shù)組內(nèi),因此這個區(qū)間不是最

    2024年02月10日
    瀏覽(33)
  • 【leetcode 力扣刷題】移除鏈表元素 多種解法

    【leetcode 力扣刷題】移除鏈表元素 多種解法

    題目鏈接:203.移除鏈表元素 題目內(nèi)容: 理解題意:就是單純的刪除鏈表中所有值等于給定的val的節(jié)點。上一篇博客中介紹了鏈表的基礎(chǔ)操作,在刪除鏈表中節(jié)點時,需要注意的是頭節(jié)點: 如果沒有虛擬頭節(jié)點,那么對頭節(jié)點的刪除需要做不同的處理,head = head-next; 如果有

    2024年02月12日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包