用栈来判断回文
class Solution {
public boolean isPalindrome(ListNode head) {
if (head.next == null) return true;
int len = 1;
ListNode temp = head;
while (temp.next != null) {
temp = temp.next;
len++;
}
Deque<Integer> stack = new LinkedList<>();
for (int i = 0; i < len / 2; i++) {
stack.push(head.val);
head = head.next;
}
if (len % 2 == 1) head = head.next;
while (!stack.isEmpty()) {
if (stack.pop() != head.val) return false;
head = head.next;
}
return true;
}
}
使用数组解决
class Solution {
public boolean isPalindrome(ListNode head) {
int len = 0;
// 统计链表长度
ListNode cur = head;
while (cur != null) {
len++;
cur = cur.next;
}
cur = head;
int[] res = new int[len];
// 将元素加到数组之中
for (int i = 0; i < res.length; i++){
res[i] = cur.val;
cur = cur.next;
}
// 比较回文
for (int i = 0, j = len - 1; i < j; i++, j--){
if (res[i] != res[j]){
return false;
}
}
return true;
}
}