题目描述
请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
注:(1)引入栈(2)知道链表长度时,可以使用递归法
引入栈:将前半部分的节点入栈,由于不知道链表长度,利用快慢指针的方法,将慢指针的数据进行人栈;使得在快指针指向链表尾部时,慢指针刚好位于链表的中间位置。由于回文串的对称特性,以及栈的先入后出特性,进行对比检查此串是否为回文串。
注意串长为奇数时的判定~!
import java.util.Stack; public class Palindrome { public boolean isPalindrome(ListNode pHead) { // write code here ListNode fast = pHead; ListNode slow = pHead; Stack<Integer> sc = new Stack<Integer>(); while(fast!=null && fast.next!=null){ sc.push(slow.val); slow = slow.next; fast = fast.next.next; } if(fast != null){ //奇数点 slow = slow.next; } while(slow != null){ int top = sc.pop().intValue(); if(top != slow.val) return false; slow = slow.next; } return true; } }