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:
int len;
bool isPalindrome(ListNode* head) {
if(head == NULL || head->next == NULL) {
return true;
}
len = 0;
ListNode* re = reLink(head);
int length = 0;
while(head != NULL) {
if(head->val != re->val)
return false;
re = re->next;
head = head->next;
length++;
if(length > len/2)
break;
}
return true;
}
ListNode* reLink(ListNode* head) {
ListNode* temp = head;
ListNode* re = NULL;
while(temp){
ListNode* node = new ListNode(temp->val);
node->next = re;
re = node;
temp = temp->next;
len++;
}
return re;
}
};