题目描述:
请判断一个链表是否为回文链表。
示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
思路分析:
思路一:借助辅助栈和辅助队列,链表节点依次入队列和入栈,依次出栈和出队,判断是否相等即可
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public static boolean isPalindrome(ListNode head) { //借助一个栈和一个队列去判断 Deque<ListNode> deque = new LinkedList<>(); Stack<ListNode> helper = new Stack<>(); int count = 0; while (head != null) { deque.addLast(head); helper.push(head); head = head.next; count++; } for (int i = 0; i < count; i++) { if (deque.poll().val != helper.pop().val) { return false; } } return true; } }
时间复杂度:O(n)
空间复杂度:O(2n)->O(n)
原文:https://www.cnblogs.com/ysw-go/p/11903763.html