【手把手带你刷好题】69.回文链表
【摘要】
大家好,我是安然无虞。
文章目录
每篇前言
面试题:回文链表解题思路
遇见安然遇见你,不负代码不负卿。
每篇前言...
大家好,我是安然无虞。
文章目录
-
每篇前言 - 面试题:回文链表
- 遇见安然遇见你,不负代码不负卿。
每篇前言
博客主页:安然无虞
作者认证:2021年博客新星Top2
咱的口号:🌹小比特,大梦想🌹
作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请铁汁批评斧正。
种一棵树最好的时间是十年前,其次是现在。 各位,共勉。
面试题:回文链表
原题链接:回文链表
题目描述:
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。
示例:
1->2->2->1
返回:true解题思路
之所以讲解前面两题,实际上都是为这道题准备的,本题的解题步骤是:
- 找出链表的中间位置;
- 逆置后半段
- 最后从头依次比较即可
代码执行:
//回文链表 class PalindromeList { public: //判断中间结点 struct ListNode* middleNode(struct ListNode* A) { struct ListNode* slow = A, *fast = A; while(fast && fast->next) { slow = slow->next; fast = fast->next->next; } return slow; } //反转后半部分 struct ListNode* reverseAfter(struct ListNode* mid) { struct ListNode* newHead = NULL, *cur = mid; while(cur) { struct ListNode* next = cur->next; cur->next = newHead; newHead = cur; cur = next; } return newHead; } bool chkPalindrome(ListNode* A) { // write code here //先判断中间结点 struct ListNode* mid = middleNode(A); //再反转后半部分 struct ListNode* rHead = reverseAfter(mid); while(A && rHead) { if(A->val != rHead->val) { return false; } else { A = A->next; rHead = rHead->next; } } return true; } };
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
完整代码:
遇见安然遇见你,不负代码不负卿。
码字不易,求个三连 抱拳了兄弟们。
文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。
原文链接:bit-runout.blog.csdn.net/article/details/123991256
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)