234. Palindrome Linked List

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: bool isPalindrome(ListNode* head) { if(!head) return true; ListNode * slow = head; ListNode * fast = head; ListNode * mid = NULL; while(fast && fast->next){ slow = slow->next; fast = fast->next->next; } if(fast){ //奇数个元素 slow->next = reverseList(slow->next); slow = slow->next; }else{ //偶数个元素 slow = reverseList(slow); } while(slow){ if(slow->val!=head->val) return false; else{ slow = slow->next; head = head->next; } } return true; } ListNode* reverseList(ListNode* head) { if(!head) return head; ListNode * Dummy = new ListNode(-1); ListNode * pCur = head; ListNode * pNext = nullptr; while(pCur){ pNext = pCur->next; pCur->next = Dummy->next; Dummy->next = pCur; pCur = pNext; } return Dummy->next; delete Dummy; } };

 

posted on 2017-03-04 02:02  123_123  阅读(80)  评论(0编辑  收藏  举报