1. 程式人生 > >LeetCode 第234題回文鏈表

LeetCode 第234題回文鏈表

時間 null span 指針 元素 lean lis 判斷 lee

請判斷一個鏈表是否為回文鏈表。
示例 1:
輸入: 1->2
輸出: false
示例 2:
輸入: 1->2->2->1
輸出: true
進階:
你能否用 O(n) 時間復雜度和 O(1) 空間復雜度解決此題?




思路: 遞歸雙指針
利用遞歸自帶的棧,實現從鏈表最後一個元素跳到前一個元素.
(整體: 第一個元素和最後一個元素比較,第二個元素和倒數第二個元素比較...)

思路2: 快慢指針 - 但是我覺得遞歸更舒服 orz

 1 class Solution234 {
 2 
 3   private ListNode currNode;
 4 
 5
public boolean isPalindrome(ListNode head) { 6 currNode = head; 7 return compare(head); 8 } 9 10 private boolean compare(ListNode head) { 11 if (head == null || head.next == currNode || (head.next != null) && (head.next.next== currNode)) { //比較n/2次,但遞歸結束條件過多反而會影響效率(和只帶一個結束條件比較n次的遞歸效率差不多)
13 return true; 14 } 15 boolean nextRes = compare(head.next); 16 ListNode temp = currNode; 17 currNode = currNode.next; 18 return temp.val == head.val && nextRes; 19 } 20 }

LeetCode 第234題回文鏈表