BM13 判断一个链表是否为回文结构
给定一个链表,请判断该链表是否为回文结构。
回文是指该字符串正序逆序完全一致。
解法
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param head ListNode类 the head
* @return bool布尔型
*/
typedef struct ListNode* pnode;
static inline struct ListNode* ReverseList(struct ListNode* pHead ) {
// write code here
pnode p = NULL ;
pnode q = pHead;
while(q)
{
pnode m = q->next;
q->next = p ;
p = q ;
q = m ;
}
return p;
}
bool isPail(struct ListNode* head ) {
// write code here
if(!head||!head->next)return true;
if(!head->next->next)return head->val==head->next->val;
pnode slow = head;
pnode fast = head;
pnode mid = head;
while(fast->next&&fast->next->next)
{
fast=fast->next->next;
slow=slow->next;
}
if(fast->next)
slow=slow->next;
fast = ReverseList(slow);
mid = slow;
slow = head;
while(slow!=NULL&&fast!=NULL)
{
if(slow->val!=fast->val)return false;
slow = slow->next;
fast = fast->next;
}
return true;
}