方法一:使用链表和栈
思路分析:
使用栈,先遍历得到链表的长度,同时,把链表的所有节点的值进行压栈, 之后再次遍历链表的一半,同时出栈,判断节点值是否相等
代码实现:
/**
* 使用栈,先遍历得到链表的长度,同时,把链表的所有节点的值进行压栈,
* 之后再次遍历链表的一半,同时出栈,判断与节点的值是否相同
*
* @param node
* @return
*/
public static boolean palindromicByStark(Node node) {
if (node == null) {
return false;
}
Node pNode = node;
Stack<Integer> stack = new Stack<>();
int len = 0;
//求链表长度,并且压栈
while (pNode != null) {
len++;
stack.push(pNode.val);
pNode = pNode.next;
}
pNode = node;
if (len % 2 != 0) {
return false;
}
for (int i = 0; i < len / 2; i++) {
Integer pop = stack.pop();
if (pop != pNode.val){
return false;
}
pNode = pNode.next;
}
return true;
}