C语言判断带头结点双链表是否对称

C语言判断带头结点双链表是否对称,第1张

C语言判断带头结点双链表是否对称

算法思想:
双指针从头尾相向遍历,指向元素相同继续遍历,不同返回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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5698433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存