题目描述及链接
解题思路
把链表分成两段,并且后半段逆置。
再用curA和curB同时遍历这两段链表,
若出现不相等的结点则不是回文链表;
若是回文结构,则通过画图分析可知,
当有奇数个结点时,curA和curB会同时到达NULL;
当有偶数个结点时(必须取靠右的作为mid),curB到达NULL时就是回文结构。
图示
完整代码
关于逆置链表和找中间节点的函数,请复习前面的文章。
总结
本题的难点在于想到把链表从中间分成两段并同时遍历比较。
具体写代码的过程再完善对于奇数个结点、偶数个结点怎么分段。
但是,从单链表不能访问前一个元素的性质来看,逆置后半段遍历是唯一的选择。
总之要先熟练求中间节点、逆置链表的写法。