leetcode 234
放弃每日一题了。太难坚持了。也许等自己的刷题量达到 1000 题会轻松一些目前刷题量只有 50 完全吃不消。使用线性空间我也会做就是一个简单的回文串判断就可以了。第二种做法只需要常数的时间原理是反转后半段和前半段进行比较。反转是一个题并且反转就是修改指针加上移动最后当前指针指向空节点前指针指向原来的最后一个节点。为什么我们要用后半段作为循环终止的条件因为后半段可能更加短一些如果前半段为空作为循环终止的条件有可能出现数组越界的情况也就是访问空节点来进行比较的错误。每天刷 2 道热门一百的题。整个初试就刷热门一百题。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */classSolution{public:boolisPalindrome(ListNode*head){vectorints;ListNode*pa;for(pahead;pa!nullptr;papa-next){s.push_back(pa-val);}intleft0;intrights.size()-1;while(leftright){if(s[left]!s[right]){returnfalse;}else{left;right--;}}returntrue;}};/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */classSolution{public:boolisPalindrome(ListNode*head){if(!head||!head-next){returntrue;}ListNode*slowhead;ListNode*fasthead;while(fast-nextfast-next-next){slowslow-next;fastfast-next-next;}ListNode*curslow-next;ListNode*prevnullptr;while(cur){ListNode*nextcur-next;cur-nextprev;prevcur;curnext;}ListNode*p1head;ListNode*p2prev;while(p2){if(p1-val!p2-val){returnfalse;}p1p1-next;p2p2-next;}returntrue;}};