Given a singly linked list, determine if it is a palindrome.
Example 1:
Input: 1->2
Output: false
Example 2:
Input: 1->2->2->1
Output: true
Follow up:
Could you do it in O(n) time and O(1) space?
解法一:
使用栈
bool isPalindrome(ListNode* head) {
if (!head) return true;
int len =0;
ListNode *node=head;
while(node)
{
len++;
node=node->next;
}
int steps;
if (len%2==0) steps=len/2;
else steps=len/2;
node=head;
stack<int> s;
while(steps-->0)
{
s.push(node->val);
//cout<<node->val;
node=node->next;
}
if (len%2!=0) node = node->next;
while(node)
{
//cout<<s.top()<<node->val<<endl;
if (s.top()!=node->val) return false;
s.pop();
node=node->next;
}
return true;
}
解法二
反转链表