我用c ++编写了一个代码来检查链表是否是回文。代码如下。
每次运行程序时,我都会返回1的值。在给定的例子中我使用非回文字符串然后我也得到了它的回文相同的答案。
我使用c ++标准模板库来执行此代码
#include<iostream>
#include<stack>
using namespace std;
struct node{
char data;
node *next;
};
void push(struct node** head,char data)
{
struct node *newnode= new node;
newnode->data=data;
newnode->next=(*head);
(*head)=newnode;
}
void print(struct node *ptr)
{
while(ptr!=NULL)
{
cout<<" " <<ptr->data;
ptr=ptr->next;
}
}
//this is the function to check palindrome
int checkpalindrome(node *head)
{
stack<char>s;
node *current=head;
while(current!=NULL)
{
s.push(current->data);
current=current->next;
}
while(current!=NULL && !s.empty() )
{
int ele=s.top();
s.pop();
if(ele==current->data)
current=current->next;
else
{
return 0;
break;
}
}
}
int main(){
node *first=NULL;
push(&first,'a');
push(&first,'b');
push(&first,'b');
push(&first,'d');
int c=checkpalindrome(first);
if(c==0){cout<<"not a palindrome";
}
else
{cout<<"its a palindrome";
}
}
没有语法错误。请告诉我代码中的逻辑错误
答案 0 :(得分:0)
你需要重置current
指向头部,第二个while循环永远不会在回文函数中执行,因为那时它是NULL。
// ...
*current = head; // RESET current
while(current!=NULL && !s.empty())
{
// ...
}
// ...