算法2.6回文链表
来源:互联网 发布:淘宝天猫交易平台 编辑:程序博客网 时间:2024/05/29 09:29
题目描述:请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
思路分析:因为使用的是链表,只能查找前面的元素,不能往后查找。因此可以选用链表+栈的方式存储。1、首先,找到前面一半的元素,存到栈中 2、再比较栈和后续链表是否相等
用到的是快慢指针的使用,将慢指针的入栈,还要判断原链表是奇数还是偶数,若是奇数的话,中间的可以不用比较。
程序如下
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class Palindrome {public: bool isPalindrome(ListNode* pHead) { // write code here ListNode* fast=pHead; ListNode* slow=pHead;//快慢指针的使用 stack<ListNode*> s; int arr=0; //while(fast!=NULL) while(fast!=NULL && fast->next!=NULL) { s.push(slow);//入栈 slow=slow->next; fast=fast->next->next;//fast比slow快一倍 // fast=fast->next; //arr=1; // if(fast!=NULL) //{ // fast=fast->next; // arr=2; // } } //if(2==arr) s.pop(); if(NULL!=fast)//当前链表不是空时,奇数个 slow=slow->next; while(slow!=NULL) { if(s.top()->val!=slow->val) return false; slow=slow->next;//链表偏移 s.pop();//出栈 } return true; }};
1 0
- 算法2.6回文链表
- 算法题——回文链表
- 算法:实现链表存储的回文字符串判断
- 回文算法
- 回文算法
- 回文算法
- 回文算法
- 字符串回文判断, 链表回文判断
- 链表回文判断
- 回文链表
- 回文链表(Java)
- 回文链表
- 回文链表
- 回文链表
- 判断回文链表
- 回文链表
- LintCode:回文链表
- 回文链表
- SQL 基础增删改查语句
- 自动化打包上传至 fir.im 蒲公英 pre.im
- HDU5904 思路不错的dp....比我的蠢逼LCS强多了
- Ubuntu开发环境
- 理解 Python super
- 算法2.6回文链表
- 传输层
- C# 中 SQLite 使用介绍
- malloc、free、printf、scanf函数原型
- SQL3数据库错误码
- 如何解决maven搭建项目的时候,src/main/java无法建立的问题,提示信息The folder is already a source folder.
- Python-Jenkins API使用 —— 在后端代码中操控Jenkins
- 在Android手机上编写并运行Lua脚本
- 作为电磁波的 Wi-Fi 信号