234 - Palindrome Linked List
来源:互联网 发布:linux服务器禁止ping 编辑:程序博客网 时间:2024/05/22 02:00
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?
没有达到上述的 O(1) space。
思路:
将 链表的前半部分压入栈中,然后逐个弹出和链表的后半部分比较,从而获知是否回文。
写的过程中,主要遇到的问题集中在链表长度为奇偶数的不同,奇数要先弹出栈顶元素。
C++ 代码如下:
#include <iostream>#include <stack>using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x): val(x), next(NULL) {}};class Solution {public: bool isPalindrome(ListNode* head) { if(head == NULL || head->next == NULL) return true; ListNode * current = head; int i, length; for( i = 0; current != NULL; i++ ) { current = current->next; } length = i; stack<int> mystack; current = head; int limit = length /2 ; if(length % 2 != 0) limit ++; for(int i = 0; i < limit; i++, current = current->next) mystack.push(current->val); if(length % 2 != 0) mystack.pop(); for( --i; i < length && current != NULL; current = current->next) { int v; if(!mystack.empty()) { v = mystack.top(); mystack.pop(); } if(v != current->val) return false; } return true; } ListNode * init() { ListNode * head = new ListNode(1); ListNode * second = new ListNode(2); ListNode * third = new ListNode(2); ListNode * forth = new ListNode(1); ListNode * fifth = new ListNode(3); head->next = second; head->next->next = third; head->next->next->next = forth; head->next->next->next->next = fifth; if( isPalindrome(head) == true ) cout << "yes" << endl; else cout << "no" << endl; while( head != NULL) { cout << head->val << endl; head = head->next; } return head; }};int main() { Solution s; s.init(); return 0;}
0 0
- 234Palindrome Linked List
- Palindrome Linked List 234
- 234 Palindrome Linked List
- 234Palindrome Linked List
- 234 Palindrome Linked List
- 234 - Palindrome Linked List
- 234Palindrome Linked List
- [234]Palindrome Linked List
- [234] Palindrome Linked List
- 234-Palindrome Linked List
- Palindrome Linked List leetcode 234
- 【LeetCode】234 Palindrome Linked List
- Palindrome Linked List (leetcode 234)
- leetcode 234: Palindrome Linked List
- leetcode[234]:Palindrome Linked List
- 234-e-Palindrome Linked List
- LeetCode 234Palindrome Linked List
- leetcode-234-Palindrome Linked List
- VirtualBox 中 Ubuntu 硬盘容量扩大
- 求最大连续子向量之和
- 2005年GCT真题
- 2015.8.7记录iOS侧滑实现
- leetcode_Palindrome Linked List
- 234 - Palindrome Linked List
- CocoaPods安装和使用和遇到的坑
- POJ 1026 Cipher 置换群
- 菜鸟程序员如何防止上错船
- UVa 11054 Wine trading (贪心)
- iOS UI07_导航视图控制器
- 面试题2
- hdu 1429 胜利大逃亡(续) (bfs + 状态压缩)
- Java - Thinking in Java 第8章 习题