算法思想:
双指针从头尾相向遍历,指向元素相同继续遍历,不同返回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; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)