编程菜鸡考研用于一点记录。(王道综合应用题3.04)
/**
* 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) {}
* };
*/
class Solution {
public:
bool isPalindrome(ListNode* head){
stack<int> st;
ListNode *temp=head;
int n=0;
//计算长度
while(temp){
n++;
temp=temp->next;
}
//压一半入栈进行比较
for(int i=0;i<n/2;i++){
st.push(head->val);
head=head->next;
}
//奇数个节点中心点后移
if(n%2!=0) head=head->next;
while(head){
//栈顶元素与串的后半段比较
if(head->val==st.top())
{
head=head->next;
st.pop();
}
else{
return false;
}
}
return true;
}
};