判断链表是否为回文数c++
时间: 2024-07-07 14:01:19 浏览: 32
判断链表是否为回文数,通常指的是链表的前半部分和后半部分(忽略头结点)形成镜像结构。在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;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)