题解 | #判断一个链表是否为回文结构#
判断一个链表是否为回文结构
https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 the head * @return bool布尔型 */ ListNode* reverse(ListNode* head){ if(!head) return head; ListNode* pre=NULL,*cur=head; while(cur){ ListNode *tmp=cur->next; cur->next=pre; pre=cur; cur=tmp; } return pre; } bool isPail(ListNode* head) { // write code here ListNode *fast=head,*slow=head; while(fast&&fast->next){ fast=fast->next->next; slow=slow->next; } if(fast){ slow=slow->next; } slow=reverse(slow); while(head&&slow){ if(head->val!=slow->val) return false; head=head->next; slow=slow->next; } return true; } };
快慢指针找中点,反转依次比较
时间复杂o(n) 空间o(1)