/**
 * 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;
    }
};