zoukankan      html  css  js  c++  java
  • 【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实现

  • 相关阅读:
    [CTF]跳舞的小人
    [CTF]Rabbit加密
    [CTF]ROT5/13/18/47编码
    [CTF]URL编码
    [CTF]unicode编码
    [CTF]培根密码
    电机控制总结
    stm32f4定时器配置
    MOS管测量好坏测量方法
    四元数
  • 原文地址:https://www.cnblogs.com/yongh/p/11726283.html
Copyright © 2011-2022 走看看