算法思想:
双指针从头尾相向遍历,指向元素相同继续遍历,不同返回false,直到遍历到中点,链表长度有奇偶,所以循环跳出条件不同。如果链表长度为奇数的话,跳出条件很好想就是p!=q,如果是偶数的话,其实也不难理解。如果写成p-next!=q 的话,此时跳出循环,q和q所指元素就无法比较。正确的条件是q->next!=p,即p q第一次背靠背。图解如下:
代码如下:
bool Symmetry(DlinkList L) {//判断带头结点双链表是否对称
DNode *p=L->next, *q=L->prior;
while (p!=q&&q->next!=p){
if(p->data!=q->data)
return false;
p=p->next;
q=q->prior;
}
return true;
}



