#include<iostream>
using namespace std;
//Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
class Solution {
public:
bool isPalindrome(ListNode* head) {
if (head == nullptr)
return true;
if(head!= nullptr && head->next == nullptr)
return true;
if(head!=nullptr && head->next!=nullptr && head->next->next == nullptr){\
if(head->val ==head->next->val){
return true;
}else{
return false;
}
}
ListNode* f = head;
ListNode* s = head;
while(f->next != nullptr && f->next->next != nullptr){
f = f->next->next;
s = s->next;
}
ListNode* help = nullptr;
f = s->next;
s->next = nullptr;
ListNode* end = f;
ListNode* mid = s;
if(f->next != nullptr)
help = f->next;
while(f != nullptr){
f->next = s;
if(help == nullptr)
break;
s = f;
f = help;
help = help->next;
}
s = head;
while(s != nullptr){
cout << "s: "<<s->val <<" f: "<<f->val<<endl;
if(s->val != f->val){
return false;
}
s = s->next;
f = f->next;
}
return true;
// bool flag = true;
// while(s != nullptr){
// if(s->val != f->val){
// flag = false;
// break;
// }
// s = s->next;
// f = f->next;
// }
// f = end->next;
// s = end;
// s->next = nullptr;
// help = f->next;
// while(f!=nullptr){
// f->next = s;
// if(help == nullptr){
// break;
// }
// s = f;
// f = help;
// help = help->next;
// }
// return flag;
}
};
int main(){
Solution s;
ListNode* a = new ListNode(1);
ListNode* b = new ListNode(0);
ListNode* c = new ListNode(0);
a->next = b;
b->next = c;
cout << s.isPalindrome(a);
return 0;
}