LeetCode_链表的回文结构

server/2024/10/18 19:24:54/

✨✨所属专栏:LeetCode刷题专栏✨✨

✨✨作者主页:嶔某✨✨

题目描述:

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

就比如:1->2->3->2->1就是回文链表,1->2->3->1->2不是回文链表

示例代码:

class PalindromeList {
public:bool chkPalindrome(ListNode* A) {// write code here
};

 分析:

这里我们得到解法是先找到链表的中间节点,之后将中间节点后面的节点全部逆置。之后再从mid节点和链表头节点开始遍历、判断值是否相同,以mid节点和链表头节点都不为空为循环条件。

 所以这里我们先要写出找中间节点的代码:

以前做过类似的题《快慢指针》。快指针一次走两步,慢指针一次走一步。最终慢指针会停在中间节点处。

 注意:这里while循环的条件不能把fast->next放在前面,要先判断的fast不为空,再判断fast的下一个节点是否为空。否则会导致空指针的解引用。

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

链表逆置代码:

struct ListNode* ReverseList(struct ListNode* head ) {struct ListNode* pcur = head;struct ListNode* prev = NULL;while(pcur){struct ListNode* tmp = pcur->next;pcur->next = prev;prev = pcur;pcur = tmp;}    return prev;
}

 主代码:

class PalindromeList {
public:bool chkPalindrome(ListNode* A) {// write code herestruct ListNode* mid = middleNode(A); struct ListNode* rmid = ReverseList(mid);while(A && rmid){if(A->val != rmid->val)return false;A = A->next;rmid = rmid->next;}return true;}
};

本期博客到这里就结束了,如果有什么错误,欢迎指出,如果对你有帮助,请点个赞,谢谢!


http://www.ppmy.cn/server/21094.html

相关文章

百种提权及手段一览系列第7集

特权升级的危险是显而易见的。通过提升权限,攻击者可以绕过网络安全措施,从而损害数据完整性、机密性和系统可用性。对于组织而言,这可能会导致数据泄露、系统停机以及潜在的法律和声誉后果。识别权限升级的迹象并部署预防性网络安全措施对于…

【ARMv9 DSU-120 系列 3 -- DSU-120 系统控制寄存器】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 DSU-120 系统控制寄存器系统控制寄存器的访问方式Cluster 通用系统控制寄存器寄存器重置值Generic System Control registers summaryCluster Configuration RegisterDSU-120 系统控制寄存器 在ARMv9架构中,DSU-120(…

python绘制R控制图(Range Chart)

R控制图(Range Chart),也称为范围图或移动极差图,是一种用于分析和控制生产过程中的变异性的统计工具。它通常与Xbar控制图(均值图)一起使用,可以提供关于生产过程变异性的额外信息。以下是R控制…

【Vue3】watch监听使用【超详细】

文章目录 情况一:监听ref定义的基本类型数据情况二:监听ref定义的对象类型数据情况三:监听reactive定义的对象类型数据情况四:监听ref或reactive定义的对象类型数据中某个属性情况五:监听上述多个数据 #watch使用结构 watch(被监视的数据,监视的回调,配置对象(deep,immediate等…

使用 Python 和 DirectShow 从相机捕获图像

在 Python 中使用 OpenCV 是视觉应用程序原型的一个非常好的解决方案,它允许您快速起草和测试算法。处理从文件中读取的图像非常容易,如果要处理从相机捕获的图像,则不那么容易。OpenCV 提供了一些基本方法来访问链接到 PC 的相机(通过对象),但大多数时候,即使对于简单的…

[论文笔记]GAUSSIAN ERROR LINEAR UNITS (GELUS)

引言 今天来看一下GELU的原始论文。 作者提出了GELU(Gaussian Error Linear Unit,高斯误差线性单元)非线性激活函数: GELU x Φ ( x ) \text{GELU} x\Phi(x) GELUxΦ(x),其中 Φ ( x ) \Phi(x) Φ(x)​是标准高斯累积分布函数。与ReLU激活函数通过输入…

如何备考PMP考试?

最近几年,PMP报考人数居高不下,越来越多的企业认可PMP证书,招聘时也会报名拥有PMP证书者优先考虑。根据《薪酬力:项目管理薪酬调查报告》的数据,PMI所调查对象的30多个国家中,拥有PMP认证的薪资&#xff0c…

Rust学习03:解决了如何更改项目名称的小问题

好不容易跑通了第一个小程序! 高兴之余,突然又对小程序的名字不满意了,想改一个更好的。奇怪么?不奇怪!对于一位想不开而来自学Rust的人又有什么事情是做不出的呐~~ 开始我是直接改了项目文件夹的名字~捅了马蜂窝了&am…