// Этот вопрос в основном инвертирует связанный список для проверки палиндрома
#include<bits/stdc++.h>
using namespace std;
class node
{
node *next;
int data;
public:
node()
{
next=NULL;
data=0;
}
node(int x)
{
next=NULL;
data=x;
}
node *insert1(int x);
void disp(node *head);
bool isPalindromeBETTERApproach(node *head);
node *reverse1(node *head1);
};
node *head=NULL;
node *node::insert1(int x)
{
node *temp=new node(x);
if(head==NULL)
{
head=temp;
}
else
{
node *curr=new node();
for(curr=head;curr->next!=NULL;curr=curr->next);
curr->next=temp;
}
return head;
}
void node::disp(node *head)
{
if(head==NULL)
{
cout<<"cant disp nothing"<<endl;
return;
}
else
{
for(node *curr=head;curr!=NULL;curr=curr->next)
{
cout<<curr->data<<" ";
}
cout<<endl;
}
}
node *node::reverse1(node *head1)
{
if(head1==NULL)
{
cout<<"Cannot return empty head";
}
else
{
node *prev=new node();
node *curr=new node();
prev=NULL;
curr=NULL;
while(head1)
{
prev=curr;
curr=head1;
head1=head1->next;
curr->next=prev;
}
head1=curr;
}
return head1;
}
bool node::isPalindromeBETTERApproach(node *head)
{
if(head==NULL)
{
return 0;
}
else
{
cout<<"head"<<endl;
for(node *curr=head;curr!=NULL;curr=curr->next)
{
cout<<curr->data<<" ";
}
cout<<endl;
// 1 2 1
int flag=0;
node *head1=head;
head1=reverse1(head1);
cout<<"head1"<<endl;
for(node *curr=head1;curr!=NULL;curr=curr->next)
{
cout<<curr->data<<" ";
}
//1 2 1
cout<<endl<<"head"<<endl;
for(node *curr=head;curr!=NULL;curr=curr->next)
{
cout<<curr->data<<" ";
}
// 1 why only 1 is getting printed?
while(head && head1)
{
if(head->data==head1->data)
{
flag=1;
}
else
{
flag=0;
break;
}
head=head->next;
head1=head1->next;
}
if(flag==1)
{
return 1;
}
else
{
return 0;
}
}
}
int main()
{
node n;
head=n.insert1(1);
head=n.insert1(2);
head=n.insert1(1);
n.disp(head);
cout<<n.isPalindromeBETTERApproach(head)<<endl;
}
// Этот вопрос в основном инвертирует связанный список для проверки палиндрома