考察知识点: 链表、双指针
题目分析:
判断是否是回文串,可以通过使用双指针,一个指针l
从左边开始向右移动,另一个指针r
从右边开始向左移动。在l < r
的前提下,当两个指针指向的值不相同时,就说明不是回文串。正常结束就说明是回文串。
但是本题中使用链表来存储数据,不能向前搜索
,可以提前将链表中的数据放入vector容器中,就可以很方便的执行上述算法。
所用编程语言: C++
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return bool布尔型
*/
bool isPalindrome(ListNode* head) {
// write code here
vector<int> nums;
while (head) {
nums.push_back(head->val);
head = head->next;
}
int size = nums.size();
int l = 0, r = size - 1;
while (l < r) {
if (nums[l] != nums[r]) return false;
l++;
r--;
}
return true;
}
};