【LeetCode】234. Palindrome Linked List

Difficulty:easy

 More:【目录】LeetCode Java实现

Description

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?

Intuition

Mehtod 1. reverse the right half of the list

Method 2. use a stack to store

 

Solution

    //Method 1: reverse half of the list
    public boolean isPalindrome(ListNode head) {
        if(head==null)
            return true;
        ListNode slow = head, fast = head;
        while(fast!=null && fast.next!=null){
            slow = slow.next;
            fast = fast.next.next;
        }
        if(fast!=null) // odd nodes: let right half smaller
            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 node){
        ListNode pre = null;
        ListNode cur = node;
        while(cur!=null){
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
    
    
    //Method 2: use a stack to store
    public boolean isPalindrome1(ListNode head) {
        Stack<ListNode> stack = new Stack<>();
        ListNode node = head;
        while(node!=null){
            stack.push(node);
            node=node.next;
        }
        while(!stack.isEmpty()){
            if(head.val != stack.pop().val)
                return false;
            head=head.next;
        }
        return true;
    }

  

Complexity

Method 1: (it will modify the original list)

Time complexity : O(n)

Space complexity : O(1)

 

Method 2:

Time complexity : O(n)

Space complexity : O(n)

 

 More:【目录】LeetCode Java实现

 

posted @ 2019-10-23 14:52  华仔要长胖  阅读(195)  评论(0编辑  收藏  举报