题目:
123454321,为回文串
判断已知链表是否是回文链表。
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Palindrome {
public:
bool isPalindrome(ListNode* pHead) {//利用快慢指针来实现;
// write code here
if(pHead==NULL)
return true;
ListNode *p=pHead;
ListNode *q=pHead;
stack <int> st;
st.push(q->val);
while(p->next!=NULL&&p->next->next!=NULL)
{
q=q->next;
st.push(q->val);
p=p->next->next;
}
if(p->next==NULL)//判断是否为奇数个结点;
st.pop();
q=q->next;//慢指针遍历到链表中间,依次将入栈的结点出栈,判断后半段结点是否与前半段结点相同;
while(!st.empty())
{
if(q->val!=st.top())
break;
q=q->next;
st.pop();
}
if(st.empty())
return true;
else
return false;
}
};
本文介绍了一种使用快慢指针结合栈的方法来判断单链表是否为回文链表。通过快指针找到中点,慢指针依次入栈并比较,实现了高效的回文链表判断。

被折叠的 条评论
为什么被折叠?



