给定一个链表,请判断该链表是否为回文结构。
回文是指该字符串正序逆序完全一致。
数据范围: 链表节点数 0≤n≤10^5
链表中每个节点的值满足 ∣val∣≤10^7
# 示例1
输入:{1}
返回值:true
# 示例2
输入:{2,1}
返回值:false
说明:2->1
# 示例3
输入: {1,2,2,1}
返回值:true
说明:1->2->2->1
/* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
bool isPail(struct ListNode* head ) {
// write code here
struct ListNode* pfast; //快指针
struct ListNode* pslow;//慢指针
struct ListNode* pnex;//后面一个指针
pfast = head;
pslow = head;
pnex = NULL;
if(head==NULL || head->next==NULL)
{
return true;
}
while(pfast!=NULL && pfast->next!=NULL)
{
pfast = pfast->next->next;
pslow = pslow->next;
}
pfast = pslow->next;
pslow->next=NULL;
while(pfast!=NULL)
{
pnex = pfast->next;
pfast->next = pslow;
pslow = pfast;
pfast = pnex;
}
pfast = head;
while(pslow!=NULL && pfast!=NULL)
{
if(pslow->val!=pfast->val)
{
return false;
}
pfast = pfast->next;
pslow = pslow->next;
}
return true;
//只要循环n/2次
// for(int i=0;i<(n/2);i++)
// {
// j = 0;
// while(j<(n-i-1))
// {
// p2 = p2->next;
// j++;
// }
// if(p1->val == p2->val)
// {
// p1 = p1->next;
// p2 = head;
// }
// else
// {
// return false;
// }
// }
}