данные головы теряются после обращения к списку избранного - PullRequest
0 голосов
/ 17 апреля 2020

// Этот вопрос в основном инвертирует связанный список для проверки палиндрома

#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; 
}

// Этот вопрос в основном инвертирует связанный список для проверки палиндрома

...