判断链表是否为回文数c++
时间: 2024-07-07 11:01:19 浏览: 97
C++利用链表模板类实现简易队列
5星 · 资源好评率100%
判断链表是否为回文数,通常指的是链表的前半部分和后半部分(忽略头结点)形成镜像结构。在C++中,可以通过双指针技巧来解决这个问题,一个指针从链表头部开始,另一个从尾部开始,同时向中间移动,比较它们所指向的节点值是否相等,直到两个指针相遇或交叉。
以下是一个简单的C++代码示例:
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
bool isPalindrome(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
// 链表为空或者只有一个节点,都是回文链表
return true;
}
ListNode* slow = head; // 缓慢指针
ListNode* fast = head->next; // 快速指针
// 找到链表的中点
while (fast != nullptr && fast->next != nullptr) {
slow = slow->next;
fast = fast->next->next;
}
ListNode* reverseStart = slow->next; // 反转链表的起点
// 双指针,一个正向一个反向比较
for (slow = head, fast = reverseStart; slow != reverseStart; slow++, fast--) {
if (slow->val != fast->val) {
return false;
}
}
return true;
}
```
阅读全文