leetCode_234. Palindrome Linked List(判断是否为回文串)
来源:互联网 发布:大众网络投资产品排行 编辑:程序博客网 时间:2024/05/16 05:21
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
一开始的思路就是把链表的节点值用vector存起来,再首++尾--进行判断
代码如下
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool isPalindrome(ListNode* head) { if (!head || !head->next) return true; vector<int> p; while(head){ p.push_back(head->val); head = head->next; } int j = p.size() - 1; for (int i=0;i<j;i++,j--){ if(p[i] != p[j]) return false; } return true; }};但是这样的话就没有做到O(1)的空间复杂度
那么我们就想,上面一种方法是首尾向中靠近判断,那我们把后半段翻转过来,
如图所示,最后p和q指针同时向后移动,遇到不相等的就返回false
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool isPalindrome(ListNode* head) { //如果链表为空或者只有一个元素就返回true if (!head || !head->next) return true; //用来定位到链表的中间 ListNode* slow = head; ListNode* fast = head; while(fast->next && fast->next->next){ slow = slow->next; fast = fast->next->next; } //现在slow就指向链表的中间部分 ListNode*middle = slow,*temp; //curr指向后半段的第一个节点 ListNode* curr = middle->next; //这里把前半段和后半段分开 middle->next = NULL; while(curr){ temp = curr; curr = curr->next; temp->next = middle->next; middle->next = temp; } middle = middle->next; while(middle){ if(head->val != middle->val) return false; head = head->next; middle = middle->next; } return true; }};
这样就满足O(1)的空间复杂度了,不过时间比第一种方法慢了一点
阅读全文
0 0
- leetCode_234. Palindrome Linked List(判断是否为回文串)
- leetcode_234. Palindrome Linked List 判断单链表是否为回文串,快慢指针法找中间节点,反转单链表
- [分析总结:leetcode-Palindrome Linked List] 给定单链表,判断链表是否为回文。
- 【Leetcode】234. Palindrome Linked List -判断链表是否为回文序列
- Palindrome Linked List 判断链表是否回文 栈实现
- Leetcode-234. Palindrome Linked List(判断链表是否回文)
- Palindrome Linked List 判断是否是回文链表
- LeetCode 234. Palindrome Linked List判断链表是否回文
- 234. Palindrome Linked List | 判断一个单链表是否是回文
- Palindrome Linked List 判断一个链表是不是回文串
- 234. Palindrome Linked List 判断链表是否回文(C++解决)
- LinkLists 检查一个链表是否为回文 Check if a linked list is palindrome @CareerCup
- 234. Palindrome Linked List (回文链表判断)
- leetcode 234. Palindrome Linked List 回文链表的判断
- [LeetCode]Palindrome Number 判断二进制和十进制是否为回文
- LeetCode-9 Palindrome Number(判断是否为回文int型)
- leetcode Palindrome Number (判断整数是否为回文)
- 9. Palindrome Number(判断一个整数是否为回文数)
- Bootstrap Table 中文文档(最终完整翻译版)
- 讲给Android程序员看的前端教程(05)——HTML5标签(4)
- TCP 三次握手和四次挥手(使用Wireshark进行抓包查看)
- jquery validation 在触发按钮单击事件进行表单校验和验证通过后发起ajax请求的解决方案
- C++风格_自增
- leetCode_234. Palindrome Linked List(判断是否为回文串)
- Qt 5.7.0 (32 bit) 配置 Android 环境
- UVALive 3353 Optimal Bus Route Design
- Android移动开发-调用方向传感器开发简易指南针的实现
- 如何将一个已存在的目录转换为一个 GIT 项目并托管到 GITHUB 仓库
- 进程间通讯——信号量
- linux之getopt 函数
- 常见web错误码 404 500
- Android_Menu