编写一个函数,检查输入的链表是否是回文的。
示例 1:
输入: 1->2 输出: false
示例 2:
输入: 1->2->2->1 输出: true
?链表的回文结构,应该先找到中间节点,然后进行一次反转。
然后对其值进行比较。
struct ListNode* reverseList(struct ListNode* head){
struct ListNode*newHead=NULL;
struct ListNode*cur=head;
while(cur){
struct ListNode*next=cur->next;
cur->next=newHead;
newHead=cur;
cur=next;
}
return newHead;
}
struct ListNode* middleNode(struct ListNode* head) {
struct ListNode* fast=head,*slow=head;
while(fast&&fast->next){
slow=slow->next;
fast=fast->next->next;
}
return slow;
}
bool isPalindrome(struct ListNode* head){
struct ListNode*mid=middleNode(head);
struct ListNode*rHead=reverseList(mid);
struct ListNode*curA=head;
struct ListNode*curR=rHead;
while(curA&&curR){
if(curA->val!=curR->val){
return false;
}
else{
curA=curA->next;
curR=curR->next;
}
}
return true;
}