//两个栈,先遍历链表将值压入v1中,然后弹出v1栈顶上半部分压入v2中,注意链表节点是奇数个的情况,然后v1,v2比较是否相等 class Solution { public: bool isPail(ListNode* head) { if(!head) return true; ListNode *cur=head; //两个栈 stack<int> v1; stack<int> v2; //先遍历链表将值压入v1中 while(cur) { v1.push(cur->val); cur=cur->next; } //弹出v1栈顶上半部分压入v2中 for(int n=v1.size()/2; n>0; --n) { v2.push(v1.top()); v1.pop(); } // 注意链表节点是奇数个的情况 if(v1.size()!=v2.size()) v1.pop(); //然后v1,v2比较是否相等 while(!v1.empty()) { if(v1.top() != v2.top()) return false; v1.pop(); v2.pop(); } return true; } };