链表回文结构
编写一个函数,检查输入的链表是否是回文的。
示例 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;
}