给定一个链表的 头节点 head ,请判断其是否为回文链表。
如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
示例 1:
输入: head = [1,2,3,3,2,1]
输出: true
示例 2:
输入: head = [1,2]
输出: false
提示:
链表 L 的长度范围为 [1, 105]
0 <= node.val <= 9
进阶:能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
用个数组把链表装进去,然后用数组来判断是不是回文串就行了。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head) {
vector<int> tmp;
while(head != nullptr)
{
tmp.emplace_back(head->val);
head = head->next;
}
for(int i=0, j=tmp.size()-1; i<j; i++,j--)
{
if(tmp[i]==tmp[j]) continue;
if(tmp[i] != tmp[j])
return false;
}
return true;
}
};
但是这个样子的空间复杂度和时间复杂度比较高,看到评论区还有其他方法:
其他方法