package com. my. util;
public class SingleNode {
public int value;
public SingleNode next;
public SingleNode ( int data) {
this . value = data;
}
}
package com. my. suanfa;
import java. util. Stack;
import com. my. util. SingleNode;
public class Solution04 {
public boolean isPalindrome1 ( SingleNode head) {
Stack< SingleNode> stack = new Stack < SingleNode> ( ) ;
SingleNode cur = head;
while ( cur != null) {
stack. push ( cur) ;
cur = cur. next;
}
while ( head != null) {
if ( head. value != stack. pop ( ) . value) {
return false ;
}
head = head. next;
}
return true ;
}
public boolean isPalindrome2 ( SingleNode head) {
if ( head == null || head. next == null) {
return true ;
}
SingleNode right = head. next;
SingleNode cur = head;
while ( cur. next != null && cur. next. next != null) {
right = right. next;
cur = cur. next. next;
}
Stack< SingleNode> stack = new Stack < SingleNode> ( ) ;
while ( right != null) {
stack. push ( right) ;
right = right. next;
}
while ( ! stack. isEmpty ( ) ) {
if ( head. value != stack. pop ( ) . value) {
return false ;
}
head = head. next;
}
return true ;
}
public boolean isPalindrome3 ( SingleNode head) {
if ( head == null || head. next == null) {
return true ;
}
SingleNode n1 = head;
SingleNode n2 = head;
while ( n2. next != null && n2. next. next != null) {
n1 = n1. next;
n2 = n2. next. next;
}
n2 = n1. next;
n1. next = null;
SingleNode n3 = null;
while ( n2 != null) {
n3 = n2. next;
n2. next = n1;
n1 = n2;
n2 = n3;
}
n3 = n1;
n2 = head;
boolean res = true ;
while ( n1 != null && n2 != null) {
if ( n1. value != n2. value) {
res = false ;
break ;
}
n1 = n1. next;
n2 = n2. next;
}
n1 = n3. next;
n3. next = null;
while ( n1 != null) {
n2 = n1. next;
n1. next = n3;
n3 = n1;
n1 = n2;
}
return res;
}
}