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

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

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

請判斷一個鏈表是否為回文鏈表。

示例 1:

輸入: 1->2

輸出: false

示例 2:

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

輸出: true

思路

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

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

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

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

5.按照cur1的長度,一次比較cur1和cur2的節(jié)點數(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;  //慢指針的前一個指針,用來分割鏈表
        while(fast&&fast->next){  //循環(huán)條件是fast和fast的下一個節(jié)點是否都存在,不用寫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是前半部分鏈表的最后一個節(jié)點,所以是per的下一個結(jié)點為空,不是per==nullptr
        ListNode* cur1=head; //前半部分的鏈表
        ListNode* cur2=reverse(slow);  //對后半部分的鏈表進行反轉(zhuǎn),reverse(ListNode* slow)錯誤,調(diào)用不用寫類型ListNode*

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

    C++ pair的用法實例詳解

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

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

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

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

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

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

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

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

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

    C++示例講解string容器

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

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

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

    opencv利用霍夫變換檢測直線進行圖片校正

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

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

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

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

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

最新評論

洮南市| 昂仁县| 齐齐哈尔市| 旬阳县| 新竹市| 荥经县| 九寨沟县| 昌邑市| 枞阳县| 祥云县| 浦城县| 米脂县| 新绛县| 安溪县| 山阳县| 昌宁县| 鸡东县| 丽水市| 龙山县| 东平县| 曲阜市| 应用必备| 沭阳县| 诸城市| 丰城市| 会东县| 罗山县| 台东县| 江源县| 岳阳县| 杭锦后旗| 平泉县| 沅陵县| 兴化市| 旺苍县| 临洮县| 安福县| 西城区| 自贡市| 阿荣旗| 蓬莱市|