题目
请判断一个链表是否为回文链表。
示例1:
1 | 输入:head = [1,2,2,1] |
示例2:
1 | 输入:head = [1,2] |
提示:
- 链表中节点数目在范围
[1, 105]
内 0 <= Node.val <= 9
进阶
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
解法
解法一:
借助数组
Java
1 | public boolean isPalindrome(ListNode head) { |
这里要注意一个点,之前第11行的比较语句是nums.get(begin) != nums.get(end),在跑以下测试用例的时候是没有问题的。
[1,2]
[1,2,1]
[1,2,2,1]
但是碰到用例[-129,-129]就出现解答错误。然后才想起来,JVM对整型数据有优化,[-128,128]范围内的数字是共享的,所以一旦数字超过范围nums.get(begin) != nums.get(end) 就不会再相等了。
这才把比较语句改为nums.get(begin).intValue() != nums.get(end).intValue()
解法二:
借助栈和快慢指针
Java
1 | public boolean isPalindrome(ListNode head) { |
解法三:
快慢指针和翻转链表
Java
1 | public boolean isPalindrome(ListNode head) { |