• 力扣234.回文链表


    给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

    示例 1:

    输入:head = [1,2,2,1]
    输出:true
    

    示例 2:

    输入:head = [1,2]
    输出:false

     解题思路:快慢指针法

    1.首先定义两个指针从头节点开始,一个快指针,一个慢指针(快指针一次走两步,慢指针一次走一步)。

    2.当快指针走到NULL时,慢指针刚好走到链表中间。

    3.反转中间链表后面的节点。

    4.定义两个指针,一个从头结点开始,一个从反转后的链表头节点开始,向后遍历比较是否是回文链表。

     * struct ListNode {

     *     int val;

     *     struct ListNode *next;

     * };

     */

    struct ListNode* reverse (struct ListNode*head)

    {

        struct ListNode*pre=NULL;

        struct ListNode*cur=head;

        while (cur!=NULL)

        {

            struct ListNode*next=cur->next;

            cur->next=pre;

            pre=cur;

            cur=next;

        }

        return pre;

    }

    bool isPalindrome(struct ListNode* head){

        struct ListNode*p=head;

        struct ListNode*q=head;

        while (p->next!=NULL&&p->next->next!=NULL)

        {

            p=p->next->next;

            q=q->next;

        }

        struct ListNode*z=head;

        struct ListNode*s;

        s=reverse(q->next);

        while (s!=NULL)

        {

            if (z->val!=s->val)

            {

                return false;

            }

            z=z->next;

            s=s->next;

        }

        return true;

    }

  • 相关阅读:
    Vue3+ts -01
    电视访问群晖共享文件失败的设置方式,降低协议版本
    RabbitMQ用户管理
    数据库选择题笔记
    虎符限币种提现 用户曲线出金即亏损
    依据象限搜索及混合预计耗费的A*改进算法,包含8邻域及24邻域的改进
    Flutter环境搭建及新建项目
    整体记录一下asp.net core 认证和授权
    Ingress详解
    shell中 << EOF 和 EOF 使用
  • 原文地址:https://blog.csdn.net/qq_70799748/article/details/127824550