• 数据结构与算法之美,课后习题:06|链表(上):如何判断单链表回文字符串?


    最新学习前google工程师王争大佬的《数据结构与算法之美》,06|链表(上):如何实现LRU缓存淘汰算法,

    这章节课后习题:如何判断一个字符串是否是回文字符串的问题,如果字符串是通过单链表来存储,那么如何判断是一个回文串呢?

    以下是思路:

    使用快慢两个指针找到链表中点,慢指针走1步,快指针走2步。每次慢指针走过的路都要逆序,使得链表前半部分反序,最后再比

    较两侧链表是否相等时,顺便逆序前半段,复原链表。注意区分奇偶。

    时间复杂度:O(n)

    空间复杂度:O(1)

    代码(经过自己验证过,如果有不足请各位大佬们留言指出~):

     1 bool HuiWenString(Node * pHead)
     2 {
     3     if (!pHead || !pHead->pNext)
     4     {
     5         return true;
     6     }
     7     bool bIsHuiWen = true;
     8     Node * pPrev = pHead;    //始终是慢指针(pSlow)前个节点,链表前半部分逆序的头节点,最后要与pSlow比较
     9     Node * pTemp = NULL;    //临时变量
    10     Node * pSlow = pHead;    //慢指针
    11     Node * pFast = pHead;    //快指针,用于帮助慢指针定位中间点。
    12     while (pFast && pFast->pNext)    //找中间节点
    13     {
    14         pFast = pFast->pNext->pNext;
    15         //逆序前半段
    16         pTemp = pPrev;
    17         pPrev = pSlow;
    18         pSlow = pSlow->pNext;
    19         pPrev->pNext = pTemp;
    20     }
    21     Node * pPrevNext = pSlow;//pPrev的后一个节点,用于还原前半部分的逆序链表
    22 
    23     if(!pFast)//
    24     {
    25         pSlow = pSlow->pNext;
    26     }
    27     while (pSlow)
    28     {
    29         if (bIsHuiWen)
    30         {
    31             if (pSlow->a != pPrev->a)
    32             {
    33                 bIsHuiWen = false;
    34             }
    35         }
    36         //再次逆序前半段,恢复链表
    37         pTemp = pPrev->pNext;
    38         pPrev->pNext = pPrevNext;
    39         pPrevNext = pPrev;
    40         pPrev = pTemp;
    41 
    42         pSlow = pSlow->pNext;
    43     }
    44     pHead->pNext = pPrevNext;
    45     return bIsHuiWen;
    46 }
    View Code

      

  • 相关阅读:
    Cents 7 Kubernetes
    Docker registry
    centos 7 安装 docker
    ToList()所带来的性能影响
    C#之Linq、where()、FindAll()的区别
    2.2 数据库高速缓冲区
    ORACLE之autotrace使用
    spring.net简介
    初识批处理
    TIBCO Rendezvous — 技术介绍
  • 原文地址:https://www.cnblogs.com/workharder/p/10811172.html
Copyright © 2020-2023  润新知