检测单链表是否是回文

来源:互联网 发布:flash player修复软件 编辑:程序博客网 时间:2024/04/23 17:50

如何在不显式申请额外空间的情况下完成?


设置两个指针,一个指针到链表末尾时开始回溯,另一个指针开始和这个指针比较


这个代码有错误,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);}


原创粉丝点击