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?
实现;
bool isPalindrome(ListNode* head) {
if (head == NULL || head->next == NULL) return true;
ListNode* beg = head, *end = head;
while (end->next) {
end = end->next;
if (end->next) {
beg = beg->next;
end = end->next;
}
}
reverseList(beg);
ListNode* mid = beg->next;
ListNode *start = head;
while (mid) {
if (start->val != mid->val) {
return false;
}
mid = mid->next;
start = start->next;
}
reverseList(beg);
return true;
}
void reverseList(ListNode* node){
ListNode* head = node->next;
if (head == NULL || head->next == NULL) return;
ListNode* next = head;
ListNode* beg = head;
while (next->next) {
ListNode* temp = next->next;
next->next = temp->next;
temp->next = beg;
beg = temp;
}
head = beg;
node->next = head;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode234——Palindrome Linked List,O(n) time and O(1) space
原文地址:http://blog.csdn.net/booirror/article/details/47166739