领扣(LeetCode)回文链表 个人题解
Posted Axiangcoding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了领扣(LeetCode)回文链表 个人题解相关的知识,希望对你有一定的参考价值。
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2 输出: false
示例 2:
输入: 1->2->2->1 输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
一个最暴力的做法,遍历一次,内容保存在数组内,然后判断是否回文。
遇到一个比较严重的问题需要记录一下,使用Vector类时,设定的类型为Integer,必须使用Equals函数来判断两数是否相等,使用==则不行。奇怪的是,只有部分判断是错误的。
查阅百度,发现了问题所在:
这种行为差异的原因是JVM维护Integer范围为-128到127 的对象的缓存(可以使用系统属性“java.lang.Integer.IntegerCache.high”
或JVM来覆盖上限值参数“-XX:AutoBoxCacheMax = size”)。对于此范围内的值,Integer.valueOf()将返回缓存的值,而不是创建一个新的值。
所以,虽然没有达到题目的进阶要求使用O(1)的空间复杂度完成问题,但还是学习到了新的知识点。
代码如下:
1 class Solution { 2 public boolean isPalindrome(ListNode head) { 3 Vector<Integer> vector=new Vector<>(); 4 if(head==null) 5 return true; 6 else 7 vector.add(head.val); 8 while(head.next!=null) 9 { 10 vector.add(head.next.val); 11 head=head.next; 12 } 13 int left=0,right=vector.size()-1; 14 while(left<=right) 15 { 16 System.out.println(vector.get(left)+"***"+vector.get(right)); 17 if(vector.get(left).equals(vector.get(right))) 18 { 19 left++; 20 right--; 21 continue; 22 } 23 else 24 return false; 25 } 26 return true; 27 } 28 }
以上是关于领扣(LeetCode)回文链表 个人题解的主要内容,如果未能解决你的问题,请参考以下文章