数据结构:判断链表回文结构

描述

给定一个链表,判断该链表是否为回文结构。回文是指该字符串正序逆序完全一致。如当输入链表 {1,2,3,2,1} 时,断定是回文结构,输出True。

代码实现

C语言代码:

 

 

bool isPail(struct ListNode* head ) {
    // write code here
    if(head == NULL || head->next == NULL)
        return true;
    //第一步:定义快慢指针,并将其指向头结点
    struct ListNode *slow, *fast;
    slow = head;
    fast = head;
    //第二步:快指针每次走两步,慢指针走一步
    while (fast != NULL && fast->next != NULL) {
        fast = fast->next->next;
        slow = slow->next;
    }
    //第三步:快指针指向慢指针后继结点,慢指针断链
    fast = slow->next;
    slow->next = NULL;

    struct ListNode *p;
    p = NULL;
    //第四步:反转后半部分的链表
    while (fast != NULL) {
        p = fast->next;
        fast->next = slow;
        slow = fast;
        fast = p;
    }
    //第五步:将快指针指向原始链表头部,将快慢指针结点的值进行对比
    fast = head;
    while (fast != NULL && slow != NULL) {
        if(fast->val != slow->val)
            return  false;
        fast = fast->next;
        slow = slow->next;
    }
    return true;
}

 

 

图解代码

第一步:定义快慢指针,并将其指向头结点

链表

第二步:快指针每次走两步,慢指针走一步

链表

第三步:快指针指向慢指针后继结点,慢指针断链

链表

第四步:反转后半部分的链表

链表

第五步:将快指针指向原始链表头部,将快慢指针结点的值进行对比

链表

审核编辑:汤梓红
 

分享、在看与点赞

只要你点,我们就是胖友

链表

原文标题:数据结构:判断链表回文结构

文章出处:【微信公众号:嵌入式攻城狮】欢迎添加关注!文章转载请注明出处。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分