考察知识点: 链表、双指针

题目分析:

 判断是否是回文串,可以通过使用双指针,一个指针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;
    }
};