1class Solution {2public:3ListNode *reverse(ListNode *head) {4ListNode *prev = nullptr;5while (head) {6ListNode *current = head->next;7head->next = prev;8prev = head;9head = current;10}11return prev;12}13bool isPalindrome(ListNode *head) {14if (!head || !head->next) return true;15ListNode *tort = head;16ListNode *hare = head;17while (hare->next && hare->next->next) {18tort = tort->next;19hare = hare->next->next;20}21tort->next = reverse(tort->next);22tort = tort->next;23ListNode *dummy = head;24while (tort) {25if (tort->val != dummy->val) return false;26tort = tort->next;27dummy = dummy->next;28}29return true;30}31};3233Time Complexity : O(n / 2) + O(n / 2) + O(n / 2) Space Complexity : O(1)