题目描述
请判断一个链表是否为回文链表。
样例
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
思路
通过链表判断序列是否为回文序列比较困难
可以先遍历链表,把链表存储到vector容器中
对vector容器中的数进行回文判断较为容易
回文判断的思路:
双指针
一个从前向后,一个从后向前
如果对应的数不一样则不是回文序列
当两个指针相遇时退出循环
需要注意链表为空的特殊情况
所需知识:
算法基础课
双指针算法
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head) {
if(head == NULL)
return true;
ListNode *curr = head;
vector<int> v;
while(curr != NULL)
{
v.push_back(curr -> val);
curr = curr -> next;
}
int l = -1, r = v.size();
while(l < r)
{
l ++, r --;
if(v[l] != v[r])
return false;
}
return true;
}
};