LeetCode 第234题回文链表

 

请判断一个链表是否为回文链表。
示例 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 }

 

猜你喜欢

转载自www.cnblogs.com/rainbow-/p/10587564.html