请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
正解
import java.util.Stack;
public class Palindrome {
public static boolean isPalindrome(LinkedListNode pHead) {
LinkedListNode fast = pHead;
LinkedListNode slow = pHead;
Stack<Integer> stack = new Stack<>();
while(fast != null && fast.next != null) {
stack.push(slow.val);
fast = fast.next.next;
slow = slow.next;
}
// 奇数个节点,跳过中间哪一个节点。当fast.nexe=null,fast!=null说明当前链表有奇数个节点
if(fast != null ) {
slow = slow.next;
}
while(slow!=null) {
System.out.println(stack.peek()+"............."+slow.val);
if(stack.pop()!=slow.val) return false;
slow = slow.next;
}
return true;
}
public static void main(String[] args) {
int[] a = {4,7,1,6,1,4,2,6,9,6,3,8,7,5,2,8,1,7,8,5,6,8,9,6,3,3,5,1,7,8,5,6,5,7,1,4,8,3,9,3,3,7,7,7,3,1,3,8,3,4,1,8,8,2,8,4,6,0,2,1,3,1,2,0,6,4,8,2,8,8,1,4,3,8,3,1,3,7,7,7,3,3,9,3,8,4,1,7,5,6,5,8,7,1,5,3,3,6,9,8,6,5,8,7,1,8,2,5,7,8,3,6,9,6,2,4,1,6,1,7,4};
LinkedListNode head = new LinkedListNode(a[0]);
LinkedListNode p = new LinkedListNode(a[1]);
head.next = p;
for (int i=2 ; i<a.length; i++) {
p.next = new LinkedListNode(a[i]);
p = p.next;
}
boolean b = isPalindrome(head);
System.out.println(b);
}
}