回文链表(Java)

来源:互联网 发布:云计算平台storm 编辑:程序博客网 时间:2024/05/18 01:47

题目描述

请编写一个函数,检查链表是否为回文。

给定一个链表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 hereListNode 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;    }}


0 0
原创粉丝点击