LeetCode 第234題回文鏈表
阿新 • • 發佈:2019-03-24
時間 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題回文鏈表