如何在不显式申请额外空间的情况下完成?
设置两个指针,一个指针到链表末尾时开始回溯,另一个指针开始和这个指针比较
这个代码有错误,1 node1 = node1->next 应该加判断是否为NULL 结尾;2 node1没必要遍历一遍单链表,加一个计数,只要遍历一半就可以了
最直接的做法是用快慢指针
struct NODE
{
int nVal;
NODE* pNext;
NODE(int n) : nVal(n), pNext(NULL)
{}
};
bool _inner_check(NODE*& pNode1, NODE* pNode2)
{
if (NULL == pNode2)
return true;
if (!_inner_check(pNode1, pNode2->pNext))
return false;
if (pNode2->nVal == pNode1->nVal)
{
pNode1 = pNode1->pNext;
return true;
}
return false;
}
bool IsPalindromLink(NODE* pHead)
{
if (NULL == pHead)
return false;
NODE* pNode = pHead;
return _inner_check(pNode, pHead);
}