给你一个单链表的头节点 head
,请你判断该链表是否为回文链表。如果是,返回 true
;否则,返回 false
。
解题思路:
1 0<=inode<listlen/2,压入stack中,后半段与压入栈中的数据做比较,所有相同则返回true
2奇偶情况不同
bool isPalindrome(struct ListNode* head){
struct ListNode *stack;
struct ListNode *np;
struct ListNode *save;
int listlen=0;
int inode=0;
stack=malloc(sizeof(*stack));
np=head;
while(np!=NULL)
{
listlen++;
np=np->next;
}
if(listlen<=1)
return 1;
np=head;
for(inode=0;inode<listlen/2;inode++)
{
save=np->next;
np->next=stack;
stack=np;
np=save;
}
if(listlen%2!=0)
np=np->next;
while(np!=NULL)
{
inode++;
if(np->val!=stack->val)
return false;
np=np->next;
stack=stack->next;
}
return true;
}
ps:只有基本基本基本实现。