示例1给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
输入:head = [1,2,2,1] 输出:true示例2
输入:head = [1,2] 输出:false提示
- 链表中节点数目在范围[1, 105] 内
- 0 <= Node.val <= 9
代码Java**进阶:**你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
// 时间复杂度为O(n) 和 空间复杂度为 O(1) 的实现方法 还未想到
public boolean isPalindrome(ListNode head) {
// 用栈实现,时间复杂度为O(n) 但是空间复杂度为O(n)
// 先让前半段入栈,在依次出栈对比
Stack stack = new Stack();
ListNode p = head;
ListNode s = head;
int flag = 0;
while (p != null) {
stack.push(s.val);
if (p.next != null)
p = p.next.next;
else {
p = p.next;
flag = 1;
}
s = s.next;
}
if (flag == 1)
stack.pop();
while (s != null) {
if (s.val != stack.pop())
return false;
s = s.next;
}
return true;
}



