/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ #include <ios> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ bool huiwen(vector<int> temp) { int left = 0; int right = temp.size()-1; while(left<right) { if(temp[left]!=temp[right]) return false; ++left; --right; } return true; } ListNode* maxPalindrome(ListNode* head) { // write code here vector<int> v; ListNode* t = head; while(t) { v.emplace_back(t->val); t = t->next; } // 如果整个链表顺序都是回文的,则返回空链表 if(huiwen(v)) return nullptr; vector<int> ans; // 双重遍历找出最长连续回文子串 for(int left=0; left<v.size();++left) { for(int right=left+1; right<v.size(); ++right) { vector<int> temp(v.begin()+left,v.begin()+right+1); if(huiwen(temp)) { if(ans.size() < temp.size()) ans = temp; } } } ListNode* res = new ListNode(-1); t = res; for(int i=0; i<ans.size(); ++i) { t->next = new ListNode(ans[i]); t = t->next; } return res->next; } };