考研数据结构(每日一题)
题目:设计一个算法用于判断带头结点的循环双链表是否对称。
算法思想:
让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;
}
}