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

帶你粗略了解C++回文鏈表

 更新時(shí)間:2021年08月18日 17:29:38   作者:久病成良醫(yī)  
這篇文章主要介紹了Python實(shí)現(xiàn)的判斷回文鏈表算法,結(jié)合實(shí)例形式分析了Python針對鏈表是否為回文鏈表進(jìn)行判斷的相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下

請判斷一個(gè)鏈表是否為回文鏈表。

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

思路

1.用快慢指針,快指針有兩步,慢指針走一步,快指針遇到終止位置時(shí),慢指針就在鏈表中間位置

2.同時(shí)用pre記錄慢指針指向節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),用來分割鏈表

3.將鏈表分為前后均等兩部分,如果鏈表長度是奇數(shù),那么后半部分多一個(gè)節(jié)點(diǎn)

4.將后半部分反轉(zhuǎn) ,得cur2,前半部分為cur1

5.按照cur1的長度,一次比較cur1和cur2的節(jié)點(diǎn)數(shù)值

在這里插入圖片描述

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        if(head==nullptr||head->next==nullptr)
            return true;
        ListNode* fast=head; //快指針
        ListNode* slow=head; //慢指針,找到鏈表的中間位置
        ListNode* pre=head;  //慢指針的前一個(gè)指針,用來分割鏈表
        while(fast&&fast->next){  //循環(huán)條件是fast和fast的下一個(gè)節(jié)點(diǎn)是否都存在,不用寫fast!=nullptr&&fast->next!=nullptr,直接fast&&fast->next
            pre=slow;
            fast=fast->next->next;
            slow=slow->next;
            //per=slow; //這句不能放在這,這里的slow是slow->next。只能放在slow=slow->next的前面。  
        }
        pre->next=nullptr;  //分割鏈表。per是前半部分鏈表的最后一個(gè)節(jié)點(diǎn),所以是per的下一個(gè)結(jié)點(diǎn)為空,不是per==nullptr
        ListNode* cur1=head; //前半部分的鏈表
        ListNode* cur2=reverse(slow);  //對后半部分的鏈表進(jìn)行反轉(zhuǎn),reverse(ListNode* slow)錯(cuò)誤,調(diào)用不用寫類型ListNode*

        while(cur1){ //循環(huán)條件是cur是否為空
            if(cur1->val!=cur2->val)  // 若有一個(gè)不相等則返回false
                return false;
            cur1=cur1->next;   //  判斷下一個(gè)節(jié)點(diǎn)
            cur2=cur2->next;   //
        }
        return true;  //都等于則true
    }
        //反轉(zhuǎn)鏈表
        ListNode* reverse(ListNode* head){
            ListNode* temp; //保存cur的下一個(gè)節(jié)點(diǎn),下一次要操作cur->next的節(jié)點(diǎn)
            ListNode* cur=head;
            ListNode* pre=nullptr;
            while(cur){
                temp=cur->next;
                cur->next=pre;
                pre=cur;
                cur=temp;
            }
            return pre;
        }
};

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++ pair的用法實(shí)例詳解

    C++ pair的用法實(shí)例詳解

    這篇文章主要介紹了C++ pair的用法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 簡單總結(jié)C語言中各種類型的指針的概念

    簡單總結(jié)C語言中各種類型的指針的概念

    這篇文章主要簡單總結(jié)了C語言中各種類型的指針的概念,指針可以說是C語言本身所具有的最大特性,平時(shí)根據(jù)不同使用場合習(xí)慣地將其簡單分類,需要的朋友可以參考下
    2016-03-03
  • 徹底掌握C語言strcpy函數(shù)的用法

    徹底掌握C語言strcpy函數(shù)的用法

    C語言中的strcpy函數(shù),是一種C語言的標(biāo)準(zhǔn)庫函數(shù),它用于對字符串進(jìn)行復(fù)制。本章帶你了解它的使用并模擬實(shí)現(xiàn)它
    2022-05-05
  • C++中繼承(inheritance)詳解及其作用介紹

    C++中繼承(inheritance)詳解及其作用介紹

    這篇文章主要介紹了C++中繼承(inheritance)詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 詳解C++中構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)的區(qū)別和實(shí)現(xiàn)

    詳解C++中構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)的區(qū)別和實(shí)現(xiàn)

    這篇文章主要介紹了C++中構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)的區(qū)別和實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C++示例講解string容器

    C++示例講解string容器

    c++相比c的一個(gè)好處就是實(shí)現(xiàn)了很多的容器和泛型算法,使得程序員的工作得到了很大的簡化,本文重點(diǎn)給大家介紹C++string容器基本概念講解,需要的朋友參考下吧
    2022-07-07
  • C++利用GPAC實(shí)現(xiàn)生成MP4文件的示例代碼

    C++利用GPAC實(shí)現(xiàn)生成MP4文件的示例代碼

    GPAC主要針對學(xué)生和內(nèi)容創(chuàng)作者,代表了一個(gè)跨平臺的多媒體框架,開發(fā)人員可以使用它在?LGPL?許可下制作開源媒體。本文就來用GPAC實(shí)現(xiàn)生成MP4文件,感興趣的可以了解一下
    2023-02-02
  • opencv利用霍夫變換檢測直線進(jìn)行圖片校正

    opencv利用霍夫變換檢測直線進(jìn)行圖片校正

    這篇文章主要為大家詳細(xì)介紹了opencv利用霍夫變換檢測直線對圖片進(jìn)行校正,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 深入理解C語言的邏輯控制

    深入理解C語言的邏輯控制

    這篇文章主要介紹了C語言的邏輯控制,對C語言的邏輯控制有較為深入的剖析,需要的朋友可以參考下
    2014-07-07
  • C++容器vector實(shí)現(xiàn)通訊錄功能

    C++容器vector實(shí)現(xiàn)通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C++容器vector實(shí)現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論

博兴县| 临漳县| 开阳县| 上饶县| 浮梁县| 洱源县| 科技| 达尔| 荥阳市| 驻马店市| 西宁市| 谷城县| 临颍县| 屏东县| 榆林市| 伊宁县| 和硕县| 贡觉县| 文昌市| 阳朔县| 安化县| 竹溪县| 上饶市| 怀安县| 尼玛县| 望城县| 襄垣县| 开阳县| 达孜县| 和田市| 沅江市| 麦盖提县| 金阳县| 杂多县| 新蔡县| 新泰市| 宿州市| 英超| 临江市| 新化县| 张家港市|