执行结果:
解题思路:
见注释
语言:C++
class Solution {
public:
bool isPalindrome(ListNode* head) {
//快慢指针找mid node
ListNode *fast=head;
ListNode *slow=head;
while(fast){
fast=fast->next? fast->next->next:fast->next;
slow=slow->next;
}
//后面部分逆序
ListNode *prev=nullptr;
while(slow){
ListNode *temp=slow->next;
slow->next=prev;
prev=slow;
slow=temp;
}
//判断是否相同
while(head && prev){
if(head->val != prev->val){
return false;
}
head=head->next;
prev=prev->next;
}
return true;
}
};
细节提升
1.判空
while(fast){
fast=fast->next? fast->next->next:fast->next;
slow=slow->next;
}
2.定义空指针
ListNode *prev=nullptr;
为了将空指针类型与整数类型区分开,提出了一个新的右值常量nullptr。nullptr类型的变量,被规定为只能被转换为指针类型(包括函数指针、成员指针等),而不能被转换为整数、布尔等其他类型。



