思路
front指针与p指针配合,达到类似双指针的效果
利用递归,使得结构体p先访问到链表尾部,比较front指针与p指针的val值
若不等,则令ret为false
若相等,则令front指针指向它的后指针域,指针p由于递归的性质指向p的前指针域,重复上述操作
说明
1、上述方法的缺点:在检测到有不相等的情况时,无法直接跳出递归,还是会反向遍历完整个链表
2、方法2:可以遍历链表,将链表中的val复制到数组上,进行数组回文串的比较
代码
struct ListNode* frontPointer;
void recursive(struct ListNode* p,bool *ret) {
if (p->next != NULL) recursive(p->next,ret);
if(p->val != frontPointer->val) *ret = false;
frontPointer = frontPointer->next;
}
bool isPalindrome(struct ListNode* head) {
bool ret = true;
frontPointer = head;
recursive(head,&ret);
return ret;
}