1. 程式人生 > >領釦(LeetCode)迴文連結串列 個人題解

領釦(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 }