https://leetcode.cn/problems/aMhZSa/
https://leetcode.cn/problems/palindrome-linked-list/
难度:☆☆☆
题目:
给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
提示:链表 L 的长度范围为 [1, 105],0 <= node.val <= 9。
示例:
输入: head = [1,2,3,3,2,1]
输出: true
方法:链表,借助数组+相向双指针
1、第一步,将链表中的所有节点,放入一个数组中
2、第二步,使用LCR 018. 验证回文串中的方法验证这个数组是否为回文
Python
时间复杂度:O(n),其中 n 指的是链表的元素个数。
空间复杂度:O(n),其中 n 指的是链表的元素个数。
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
lst, p = [], head
while p:
lst.append(p.val)
p = p.next
left, right = 0, len(lst) - 1
while left < right:
if lst[left] != lst[right]:
return False
else:
left += 1
right -= 1
return True
Java
时间复杂度:O(n),其中 n 指的是链表的元素个数。
空间复杂度:O(n),其中 n 指的是链表的元素个数。
class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> lst = new ArrayList<>();
ListNode p = head;
while (p != null) {
lst.add(p.val);
p = p.next;
}
int left = 0, right = lst.size() - 1;
while (left < right) {
if (lst.get(left) != lst.get(right)) {
return false;
} else {
left++;
right--;
}
}
return true;
}
}