当前位置: 首页 > news >正文

链表的回文结构OJ

链表的回文结构_牛客题霸_牛客网对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId=49&&tqId=29370&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking

题目

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

测试样例:
1->2->2->1
返回:true

 本题用到了链表的逆转和链表的中间节点的应用

首先说一下链表的中间节点的查找

struct ListNode* midfind(struct ListNode* head)
{
  struct ListNode*fast,*slow=head;
  while(fast&&fast->next)
  {
     fast=fast->next->next;
     slow=slow->next;
  }
  return slow;

  }

 中间结点的查找主要运用到了快慢指针的遍历。快指针比慢指针多走一步,最后快指针走到NULL,或者快指针的next为NULL停止。

再来说一下链表的逆转

struct ListNode* reverselist(struct ListNode*head)
{
    struct ListNode*prve= NULL;
    struct ListNode*cur=head;
    while(cur)
    {
        struct ListNode*next=cur->next;
        cur->next=prve;
        prve=cur;
        cur=next;
    }
    return prve;
}

逆转的本质是要先定义一个空指针,如上代码的*prve,然后下一步就开始保存cur的下一个指针,防止cur被覆盖,导致下一个节点丢失。最后返回prve即可。原因是这是的cur已经指向NULL,所以无意义

最后是实现链表回文(注意:C++兼容C语言)

#include <algorithm>
class PalindromeList {
public:

struct ListNode* midfind(struct ListNode* head)
{
  struct ListNode*fast,*slow=head;
  while(fast&&fast->next)
  {
     fast=fast->next->next;
     slow=slow->next;
  }
  return slow;

  }
struct ListNode* reverselist(struct ListNode*head)
{
    struct ListNode*prve= NULL;
    struct ListNode*cur=head;
    while(cur)
    {
        struct ListNode*next=cur->next;
        cur->next=prve;
        prve=cur;
        cur=next;
    }
    return prve;
}

    bool chkPalindrome(ListNode* A) {
struct ListNode* mid=midfind(A);
struct ListNode* revermid=reverselist(mid);
while(revermid&&A)
{
   if(revermid->val!=A->val)
   {
    return false;
}
revermid=revermid->next;
       A=A->next;
    }
    return true;
}

};

相关文章:

  • CSS实现一个雨滴滑落效果
  • 【第二节】C/C++数据结构之线性表
  • 【linux】自定义快捷命令/脚本
  • 【机器学习】训练GNN图神经网络模型进行节点分类
  • WindowManager相关容器类
  • 【自定义View】Android圆饼进度条
  • 循环嵌套语句的实际应用(2)
  • C#中的实体属性详解与示例
  • 基于Python的北京天气数据可视化分析
  • Kafka之Consumer原理
  • 软光敏的程序实现
  • 顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-同振与顺振的用法
  • [office] 如何才能用EXCEL打开dat文件- #微信#学习方法
  • 植物大战僵尸杂交版2.0.88最新版安装包
  • 【C语言】学生管理系统:完整模拟与实现
  • C++ CMake FetchContent用法介绍
  • BGP基础实验
  • 三维可视化技术在厂区人员、车辆定位中的设计与应用效益
  • 正则表达式三
  • sqlilabs靶场安装
  • 赵乐际:深入学习贯彻习近平生态文明思想,推动森林法全面有效贯彻实施
  • 世界哮喘日丨张旻:哮喘的整体诊断率不足三成,吸入治疗是重要治疗手段
  • 俄军击落多架企图攻击莫斯科的无人机
  • 同路人才是真朋友——驻南苏丹使馆援助东赤道州人道主义物资交接仪式侧记
  • 香港金紫荆广场举行五四升旗礼
  • AI世界的年轻人|他用影像大模型解决看病难题,“要做的研究还有很多”