隨筆-判斷一個連結串列是否為迴文連結串列
阿新 • • 發佈:2018-12-18
問題:請判斷一個連結串列是否為迴文連結串列。
示例 1:
輸入: 1->2
輸出: false
示例 2:
輸入: 1->2->2->1
輸出: true
class Solution { public boolean isPalindrome(ListNode head) { // 要實現 O(n) 的時間複雜度和 O(1) 的空間複雜度,需要翻轉後半部分 if (head == null || head.next == null) { return true; } ListNode fast = head; ListNode slow = head; // 根據快慢指標,找到連結串列的中點 while(fast.next != null && fast.next.next != null) { fast = fast.next.next; slow = slow.next; } slow = reverse(slow.next); while(slow != null) { if (head.val != slow.val) { return false; } head = head.next; slow = slow.next; } return true; } private ListNode reverse(ListNode head){ // 遞迴到最後一個節點,返回新的新的頭結點 if (head.next == null) { return head; } ListNode newHead = reverse(head.next); head.next.next = head; head.next = null; return newHead; } }