领扣(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 }

猜你喜欢

转载自www.cnblogs.com/axiangcoding/p/10054725.html