力扣labuladong——一刷day17

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣234. 回文链表
  • 二、力扣234. 回文链表


前言

判断是否是回文链表,可以用栈,或者递归,时间复杂度和空间复杂度都是on,可以使用快慢指针找到链表中点,然后反转后一半链表,空间复杂度降为o1


一、力扣234. 回文链表

用栈实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        Deque<ListNode> deq = new ArrayDeque<>();
        ListNode p = head;
        while(p != null){
            deq.offerLast(p);
            p = p.next;
        }
        p = head;
        while(!deq.isEmpty()){
            ListNode temp = deq.pollLast();
            if(temp.val != p.val){
                return false;
            }
            p = p.next;
        }
        return true;
    }
}

二、力扣234. 回文链表

递归后序实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    ListNode left;
    public boolean isPalindrome(ListNode head) {
        left = head;
        return fun(head);
    }
    public boolean fun(ListNode head){
        if(head == null){
            return true;
        }
        boolean flag = fun(head.next);
        flag = flag && head.val == left.val;
        left = left.next;
        return flag;
    }
}

你可能感兴趣的:(leetcode,算法,职场和发展,java,数据结构)