判断带头结点的双循环链表是否对称
时间: 2024-10-19 08:10:36 浏览: 30
判断一个带头结点的双循环链表是否对称,可以通过比较链表中对应节点的值是否相等,并沿着链路同时向前和向后遍历来完成。以下是一个基本的步骤:
1. 定义两个指针,一个从头开始(`curr1`),另一个从尾开始(`curr2`)。
2. 使用两个辅助指针(`prev1` 和 `prev2`)分别记录 `curr1` 和 `curr2` 的前一个节点,以便回溯。
3. 循环条件通常是 `prev1 != nullptr && prev2 != nullptr`,直到它们都到达链表的头部或尾部。
4. 每次迭代时,检查当前节点的值是否相等,如果不同则链表不对称,返回 false。
5. 更新指针:`prev1` 和 `curr1` 都向前移动一位,`prev2` 向后移动一位(如果 `curr2` 不是尾节点)。
6. 如果遍历完整个链表都没有发现不匹配的节点,则链表是对称的,返回 true。
这里是一个简单的 C++ 示例代码片段:
```cpp
class ListNode {
public:
int val;
ListNode *next, *prev;
ListNode(int x) : val(x), next(nullptr), prev(nullptr) {}
};
bool isSymmetric(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return true; // 空链表或者只有一个节点都是对称的
}
ListNode* curr1 = head, *curr2 = head->prev;
while (curr1 != curr2) {
if (curr1->val != curr2->val) {
return false;
}
curr1 = curr1->next ? curr1->next : curr2->prev;
curr2 = curr2->prev ? curr2->prev : curr1->next;
}
return true;
}
```
阅读全文