考研数据结构(每日一题)day60

考研数据结构(每日一题)

题目:设计一个算法用于判断带头结点的循环双链表是否对称。

算法思想:

让p从左向右扫描,q从右向左扫描,直到它们指向同一结点(当循环双链表中结点个数为奇数时,p==q)
或相邻(当循环双链表中结点个数为偶数时p->next=q或q->prior=p)为止,若它们所指结点值相同,则继续进行下去,否则返回0。若计较全部相等,则返回1。

完整代码:

int Symmetry(DLinkList L){
    DNode *p = L -> next,*q = L -> prior;  //定义工作指针
    while (p != q && p -> next != q)
    {
        if (p -> data == q -> data)
        {
            p = p -> next;
            q = q -> next;
        }
        else
        {
            return 0;
        }
        return 1;
    }
}

版权声明:本文为DTRblank原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。