请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
算法实现如下:
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
class Result{
public ListNode node;
public boolean result;
public Result(ListNode node, boolean result) {
super();
this.node = node;
this.result = result;
}
}
public class Palindrome {
public boolean isPalindrome(ListNode pHead) {
// write code here
ListNode temp = pHead;
if(pHead == null)
return false;
int length = 0;
while(temp != null)
{
length++;
temp = temp.next;
}
Result result = isPalindrome(pHead, length);
return result.result;
}
public Result isPalindrome(ListNode pHead, int length)
{
if(pHead == null || length == 0)
return new Result(null, true);
if(length == 1)
return new Result(pHead.next, true);
if(length == 2)
{
if(pHead.val == pHead.next.val)
return new Result(pHead.next.next, true);
else {
return new Result(pHead, false);
}
}
Result result = isPalindrome(pHead.next, length - 2);
if(result.result == false || result.node == null)
{
return result;
}
else {
return new Result(result.node.next, pHead.val == result.node.val);
}
}
}
思想:每次递归,返回当前结点的next,让前一个结点和后一个结点进行比较