領釦(LeetCode)迴文連結串列 個人題解
阿新 • • 發佈:2018-12-02
請判斷一個連結串列是否為迴文連結串列。
示例 1:
輸入: 1->2 輸出: false
示例 2:
輸入: 1->2->2->1 輸出: true
進階:
你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題?
一個最暴力的做法,遍歷一次,內容儲存在陣列內,然後判斷是否迴文。
遇到一個比較嚴重的問題需要記錄一下,使用Vector類時,設定的型別為Integer,必須使用Equals函式來判斷兩數是否相等,使用==則不行。奇怪的是,只有部分判斷是錯誤的。
查閱百度,發現了問題所在:
這種行為差異的原因是JVM維護Integer範圍為-128到127 的物件的快取
或JVM來覆蓋上限值引數“-XX:AutoBoxCacheMax = size”)。對於此範圍內的值,Integer.valueOf()將返回快取的值,而不是建立一個新的值。
所以,雖然沒有達到題目的進階要求使用O(1)的空間複雜度完成問題,但還是學習到了新的知識點。
程式碼如下:
1 class Solution { 2 public boolean isPalindrome(ListNode head) { 3 Vector<Integer> vector=newVector<>(); 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 }