![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid6oa1UQTR-j4VEZi4noALDusPvioMi2lzotqHb81NjujwvSucorAmQeMufcn7Y6n8IvuUzyhK4ygpR6_WZ_RO3v8YXkeD7pQJZMFajsZyvw-jAuGn4Pueuig5zz91-vpBlJHWqOMPLygl/s280/photo-1485856407642-7f9ba0268b51.jpg)
這題是要判斷這個 LinkedList 是否是回文。
LeetCode 題目連結
https://leetcode.com/problems/palindrome-linked-list/
題目
Given a singly linked list, determine if it is a palindrome.
Example 1:
Input: 1->2
Output: false
Example 2:
Input: 1->2->2->1
Output: true
Follow up: Could you do it in O(n) time and O(1) space?
Accept 作法
利用 fast 走兩格, slow 走一個的方式,最終 slow 會走到 LinkedList 的一半,然後在往後做翻轉,去比對 head ,如果相同就是回文。Runtime: 1 ms
Memory: 41.9 MB
Java 程式碼
class Solution { public boolean isPalindrome(ListNode head) { if(head == null || head.next == null){ return true; } ListNode slow = head; ListNode fast = head; while(fast != null && fast.next != null){ fast = fast.next.next; slow = slow.next; } if(fast != null){ slow = slow.next; } slow = reverse(slow); while (slow != null) { if (head.val != slow.val) return false; head = head.next; slow = slow.next; } return true; } public ListNode reverse(ListNode head) { ListNode prev = null; while (head != null) { ListNode next = head.next; head.next = prev; prev = head; head = next; } return prev; } }
更多 LeetCode 相關資源
複習程式面試書籍
除了 LeetCode 練習外,我也入手了這本,題庫來自真正的面試,並非摘自教科書。它們反映出頂尖公司真正會出的題目,你可以藉此做好充分準備。
需要的話可以看看,寫得很仔細。
需要的話可以看看,寫得很仔細。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoVeKbRaOIZW8Sl98-o0z-8qDJB24zstVfPK86W6ki_p2hFJfEZcTrx4ybrUg4gwrIAWyaJ1rw2ZkvUrda5b3OHsPt_nyzuxbgUk0VwoVdKpK7K3nN6HaW6lDb3mLlkLG1IahRsyzIODDf/s280/codinginterview.jpg)
書名:提升程式設計師的面試力:189道面試題目與解答
沒有留言:
張貼留言