首页 > 其他分享 >LeetCode 234. 回文链表

LeetCode 234. 回文链表

时间:2023-07-12 12:35:32浏览次数:34  
标签:head slow return auto next 链表 quick 234 LeetCode

class Solution {
public:
    ListNode* reverse(ListNode* head)//翻转以head为头节点的链表
    {
        if(!head||!head->next)  return head;
        auto a=head,b=head->next;
        while(b)
        {
            auto c=b->next;
            b->next=a;
            a=b;
            b=c;
        }
        head->next=nullptr;
        return a;
    }
    bool isPalindrome(ListNode* head) {
        if(!head||!head->next)  return head;
        auto slow=head,quick=head;
        while(quick->next&&quick->next->next)//快慢指针查找中点
        {
            slow=slow->next;
            quick=quick->next->next;
        }
        //此时slow指向中点
        auto r=reverse(slow->next),l=head;
        slow->next=NULL;
        while(l&&r)
        {
            if(l->val!=r->val)  return false;
            l=l->next;
            r=r->next;
        }
        return true;
    }
};

标签:head,slow,return,auto,next,链表,quick,234,LeetCode
From: https://www.cnblogs.com/tangxibomb/p/17547188.html

相关文章

  • Redis 数据结构 - 链表
    链表-List的底层实现链表提供了高效的节点重排能力,可以通过顺序访问的方式访问节点,并且支持增加删除节点调整长度。由于C语言原生并不支持链表,redis的链表是自己实现的。List的底层实现就是一个双向链表,支持从链表的两端进行push和pop操作,时间复杂度是O(1)。同时支持在......
  • LeetCode -- 918. 环形子数组的最大和
     遇到环形问题一般有两种考虑方法:1.破环成链2.分为数组中间部分和数组两边部分分别考虑本题采用第二种考虑方法,将原数组分为中间部分和两边部分分别考虑。中间部分即为子数组最大和,两边部分计总和减去中间部分最小和。classSolution{public:intma......
  • LeetCode 热题 100 之 128. 最长连续序列
    题目描述给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n)的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums......
  • LeetCode -- 826. 安排工作以达到最大收益
     方法一:二分加枚举通过二分快速查找小于某个难度值的最大价值。classSolution{public:intmaxProfitAssignment(vector<int>&difficulty,vector<int>&profit,vector<int>&worker){constintn=(int)difficulty.size();vector<pai......
  • 7-11 leetcode 2612
    请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠这么多毫秒。要求此函数可以解析任何值。 ps:promise期约函数(异步函数)的使用,promise是一个对象 newpromise /***@param{number}millis*/asyncfunctionsleep(millis){//返回一个异步函数......
  • 7-11 leetcode 2619
    请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1 。ps:this环境变量的使用,this.length的返回值是数字类型代码实现:<script>//在数组的原型写扩展方法可以给所有的数组......
  • 反转链表
    给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:......
  • LeetCode 剑指 Offer 08. 二叉树的下一个节点
    题目:二叉树的下一个节点给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。(树的后继)注意:如果给定的节点是中序遍历序列的最后一个,则返回空节点;二叉树一定不为空,且给定的节点一定不是空节点;解题思路二叉树的中序遍历:{[左子树],根节点,[右子树]}如图所示......
  • 【线段树】【leetcode 729. 我的日程安排表 I】
    classMyCalendar{classSeg{intl;intr;booleanval;Segleft;Segright;publicSeg(intx,inty){this.l=x;this.r=y;this.val=false;this.l......
  • leetcode328奇偶链表
    思路:先将寄链表连接起来;再将偶链表连接起来;最后将寄链表和偶链表一起连起来。首先需要一个指针结构体去记录下偶链表的表头。最后才能将两个链表连接起来。 ListNode*odd=head;LisrNode*even=head->next;ListNode*evenhead=head->next;//必须这么做,每个链表表头必须用另......