给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
示例 1:
输入:head = [1,2,2,1]
输出:true
示例 2:
输入:head = [1,2]
输出:false
提示:
链表中节点数目在范围[1, 105] 内
0 <= Node.val <= 9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码:
class Solution {
public:
ListNode *temp;
bool check(ListNode* head){
if(head==nullptr)return true;
bool ans=check(head->next)&&head->val==temp->val;
temp=temp->next;
return ans;
}
bool isPalindrome(ListNode* head) {
temp=head;
return check(head);
}
};
这里学习到的一个点是:
如果要逆序打印一个单向链表的话,可以用递归(这里用Java):
private void printListNode(ListNode head) {
if (head == null)
return;
printListNode(head.next);
System.out.println(head.val);
}
我们可以利用这一思想,用递归逆序的去遍历链表,再设置一个顺序的指针去遍历链表
两个指针所指链表结点值相同,即为回文链表。