题目
给定一个链表的头节点head,请判断该链表是否为回文结构。
例如: 1->2->1,返回true。 1->2->2->1,返回true。 15->6->15,返回true。 1->2->3,返回false。
进阶: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。
方法一
运用一个栈结构,遍历整个链表,将每一个数据添加至栈中,然后将出栈的数据逐一与链表中的数据相比较,只要中途出现不一样就返回false,否则返回true。方法一额外空间复杂度为O(n)
/**
* 是否是回文结构(方法一)
* 额外空间复杂度为O(n)
*
* @param head 头节点
* @return true/false
*/
private static boolean isPalindrome1(Node head) {
Stack<Node> stack = new Stack<>();
Node first = head;
boolean isSuccess = true;
while (first != null) {
stack.push(first);
first = first.next;
}
while (!stack.isEmpty()) {
Node pop = stack.pop();
if (