链表的回文结构
来源:互联网 发布:淘宝买身份证 编辑:程序博客网 时间:2024/04/30 09:27
题目要求:
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例:
1->2->2->1
返回:true思路:
判断一个链表是不是回文数,要求O(n)时间
1. 使用2个指针,快慢指针各一个,每次快指针移动一个,慢指针移动2个。
2. 当快指针不为NULL时候,将慢指针push到栈中。
3. 当快指针等于NULL时候,说明链表前半部分已经被压入栈中。
4. 每次栈Top元素与当前慢指针元素比较,如果不相等则返回false。如果相等,则栈Pop,慢指针++。
5. 链表奇数或者偶数节点需要判断。
代码如下:
链表结构:
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};
bool chkPalindrome(ListNode* A) { if(A==NULL) return true; ListNode *slow = A; ListNode *fast = A; stack<int> data; bool flag = false;//判断链表节点各位是奇数个还是偶数个 while(fast) { data.push(slow->val); slow = slow->next; fast = fast->next; if(fast) { fast=fast->next; } else { flag = true;//奇数个 } } if(flag) { data.pop();//链表节点为奇数个,则需要从栈中弹出一个节点 } while(slow) { if(slow->val != data.top()) return false; else { slow=slow->next; data.pop(); } } if( slow == NULL && data.empty())//最终栈为空,并且slow指针为null,则链表为回文结构 return true;return false;//链表不为空或者slow指针部位NULL,链表不是回文结构
}
1 0
- 链表的回文结构
- 链表的回文结构
- 链表的回文结构
- 链表的回文结构
- 链表的回文结构
- 链表的回文结构
- 链表的回文结构
- 链表的回文结构
- 链表的回文结构练习
- 链表15:链表的回文结构
- c++-链表的回文结构
- 链表回文结构判断
- 链表的回文结构(链表操作)
- 链表指定值清除、链表的回文结构
- Palindrome Linked List/链表的回文结构
- 链表、队列、栈的相关应用(一)链表的回文结构
- 判断一个链表是否为回文结构
- 判断一个链表是否为回文结构(java实现)
- 页面内元素跟随鼠标移动和右键菜单组件功能
- android之popupwindow点击空白消失
- 单一入口机制
- jQuery中自定义事件
- userdebug的版本 adb root
- 链表的回文结构
- js中回调函数
- sorted的学习记录
- Node.js包的管理
- js中的this
- 如何用虚拟机装SQL Server
- js中的匿名函数
- Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
- iOS 类别 ---不能添加属性