题目:
设计一个算法,用于判断带头结点的循环双链表是否对称。
分析:
- 循环双链表的特点是:当前结点方便找到前后节点,且尾指针指向第一个结点;
- 对称性:判断第一个结点和最后一个结点的值是否相等,如果相等,再判断第二个结点和倒数第二个结点;以此类推;
- 从前往后遍历,采用p指针,从后往前遍历,采用q指针;
- 如果存在不相等的,退出判断,说明链表不对称;
- 链表表长为奇数时,如果指针p和q指向同一个结点,则退出循环,说明链表是对称的;
- 链表表长为偶数是,如果指针p和q相邻,则比完p->data和q->data后即可退出;
bool Symmetry(DLinkList L){
if(L->next ==L &&