题目思路
- 看到回文数,就想到了大一上学C语言那些数组题目,所以何不搞个歪门邪道,把链表的元素全都装到数组里面再判断呢?(后来发现题解也是这样做的,哈哈)
- 链表为空,直接当它是true。(可能测试用例根本就没有空链表)
- 用动态数组
vector
,将链表里每个元素装进去 - 然后再借助i,j一前一后两个“指针下标”,使用for循环,从数组头和尾一起朝中间移动并对比,注意最终条件是
i <= values.size()
。 - ps: 别忘了搞个
LinkNode
指针指向head
,不要改动head
。另外我遍历循环里那个if-else语句可能有点多余。。。
代码
#include <vector>
class Solution {
public:
bool isPail(ListNode* head) {
if (head == NULL) {
return true;
}
vector<int> values;
ListNode* p = head;
while (p) {
values.push_back(p->val);
if (p->next != NULL) {
p = p->next;
} else {
break;
}
}
for (int i = 0, j = values.size() - 1; i <= values.size() / 2; i++, j--) {
if (values[i] != values[j]) {
return false;
}
}
return true;
}
};