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?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* temp;
bool isPalindrome(ListNode* head) {
temp = head;
return check(head);
}
bool check(ListNode* p) {
if (NULL == p) return true; //判断到达链表尾
bool isPal = check(p->next) & (temp->val == p->val); //判断是否回文
temp = temp->next;
return isPal;
}
};
笔记:使用递归函数,一个指针从头往尾寻找,一个指针利用递归函数从尾往头递归,判断是否回文。