力扣-234.回文链表
题目描述
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
class Solution {
public:bool isPalindrome(ListNode* head) {//快慢指针找到中间结点p1(偶数个结点停在中左)ListNode* p1 = head;ListNode* p2 = head->next;if(p2==nullptr)return true;while (p2!=nullptr&&p2->next!= nullptr){p1=p1->next;p2=p2->next->next;}//后半段头插法逆置p2=p1->next;p1->next=nullptr;while (p2!= nullptr){ListNode* temp = p2;p2=p2->next;temp->next=p1->next;p1->next=temp;}//比较前半段与后半段是否重合p2=head;p1=p1->next;while (p1!= nullptr){if(p1->val!=p2->val)return false;p1=p1->next;p2=p2->next;}return true;}
};
小结: 这种做法思路比较清晰,而且可以满足O(n) 时间复杂度和 O(1) 空间复杂度