题解 | #链表的回文结构#

链表的回文结构

https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A)
    {
        //特殊情况的操作
        if(A==NULL||A->next==NULL)//如果是空链表或者是一个节点的链表的话,那么肯定是回文结构的
        {
            return true;
        }

        //使用快慢指针找到链表的中间节点,最后停下来的时候慢指针就在中间节点上面
        ListNode *slow=A;
        ListNode *fast=A;
        while(fast!=NULL&&fast->next!=NULL)
        {
            slow=slow->next;//慢指针移动一步
            fast=fast->next->next;//快指针移动两步
        }

        //2.反转链表的后半部分
        ListNode *prev=NULL;
        ListNode *cur=slow;//这个时候的slow在这个链表的中间节点,那么我们从中间节点反转后半部分
        while(cur!=NULL)//从当前位置进行遍历后半部分的链表
        {
            //下面就是链表反装的代码,将后半部分链表进行反装的操作
            ListNode *nexttmp=cur->next;//保存当前节点的下个节点

            //下面两个代码是当前节点和前一个节点的转换操作
            //当前节点的next指向我们的前一个节点
            cur->next=prev;//将当前节点的指针反装,指向前一个节点,
            prev=cur;//当前的节点变成了上一个节点了

            cur=nexttmp;//更换当前的节点继续进行转换的操作,将后面剩下的节点进行转换操作
        }

        //这个时候我们的prev就变成了我们反转后连标记的头结点了
        //3.接下来我们比较链表二档前半部分和反转后的后半部分
        ListNode *firstHalf=A;//前半部分从链表头开始
        ListNode* secondHalf = prev;//后半部分从反转链表的头结点开始
        while(secondHalf != NULL)//比较每个节点,直到我们的反转链表部分遇到了空
        {
            if(firstHalf->val!=secondHalf->val)
            {
                return false;//如果两个节点的值对应不上的话,那么我们就可以判断这个链表不是回文的
            }
            //比较完成之后指针就往后移动了
            firstHalf=firstHalf->next;
            secondHalf = secondHalf->next;
        }
        //运行到这里,就说明我们的链表是回文的了,那么我们直接返回结果就行了
        return true;
        
    }
};

全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹 是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹 待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹 能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥 内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
不想上班的肱二头肌很...:简历一页,项目突出重点,自我评价可以删掉的
点赞 评论 收藏
分享
头像
11-26 14:50
门头沟学院 C++
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务