设计一个算法用于判断循环双链表是否对称。

题目描述:设计一个算法用于判断循环双链表是否对称。

分析: 分为两个情况,奇和偶,为奇(q=p)时用q!=p作为结束条件,为偶(p->next=q&&q->prior=p)时用 q->next != p 作为结束条件,因为不能在p->next=q&&q->prior=p 的条件下就退出循环这样会少判断一对。

c 复制代码
bool IsSymmetry(DLinkList L) {
    // 初始条件检查:链表为空时,认为是对称的
    if (L->next == L && L->next == L->prior)
        return true;

    // 初始化两个指针,p指向链表的头,q指向链表的尾
    DNode *p = L->next;
    DNode *q = L->prior;

    // 循环条件:当两个指针相遇之前,继续循环
    while (q != p && q->next != p) {
        // 检查当前节点的数据值是否相等
        if (p->data != q->data)
            // 如果不相等,说明链表不对称,返回 false
            return false;
        else {
            // 如果相等,继续移动指针,p向后移动,q向前移动
            p = p->next;
            q = q->prior;
        }
    }

    // 整个链表被遍历完成,没有发现不对称的情况,返回 true
    return true;
}
相关推荐
无限进步_1 小时前
【C++】C++11的类功能增强与STL变化
java·前端·数据结构·c++·后端·算法
sa100272 小时前
京东评论 API 实战:JSON 数据结构、字段含义与解析技巧
前端·数据结构·json
这料鬼有毒2 小时前
二刷hot100-17.电话号码的字母组合
数据结构
执明wa2 小时前
从 T 到协变逆变
java·开发语言·数据结构
夏日听雨眠2 小时前
排序(选择排序 ,冒泡排序,归并排序)
数据结构·算法·排序算法
tyung3 小时前
Go 手写二叉堆优先队列:避开 container/heap 的性能陷阱
数据结构·后端·go
papership3 小时前
【入门级-数据结构-1、线性结构:栈和队列】
数据结构
fu的博客3 小时前
【数据结构14】并查集:QuickUnion、QuickFind、路径压缩
数据结构
比特森林探险记3 小时前
底层数据结构分析 go 语言中的 slice map channel interface
数据结构·golang·哈希算法
我不是懒洋洋3 小时前
【C++】类和对象( 类的定义、实例化、 this指针、 C++和C语言实现Stack对比)
c语言·开发语言·数据结构·c++·经验分享·算法·visual studio