题目:判断单链表是否为回文。
提示:先找到链表的中间节点,该点往后的链表部分反转,然后对比两段链表是否一样。
pnode reverse_linknode(pnode head)
{
if (head->pnext == NULL)
return head;
pnode cur = head,prev=NULL;
while (cur)
{
pnode next = cur->pnext;
cur->pnext = prev;
prev = cur;
cur = next;
}
return prev;
}
bool IsPlalindrome(pnode head)
{
if (head == NULL)
return false;
if (head->pnext == NULL)
return true;
pnode slow = head, fast = head;
while (fast->pnext && fast->pnext->pnext)
{
slow = slow->pnext;
fast = fast->pnext->pnext;
}
pnode h2 = slow->pnext, h1 = head;
slow->pnext = NULL;
h2=reverse_linknode(h2);
while (h1 && h2)
{
if (h1->value != h2->value)
return false;
h1 = h1->pnext;
h2 = h2->pnext;
}
return true;
}