首页 > 其他分享 >判断链表回文

判断链表回文

时间:2024-03-10 21:12:06浏览次数:27  
标签:head 判断 ListNode cur next 链表 return 回文

题目:


//方法一,空间复杂度O(n)
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        vector<int> nums;      //放进数组后用双指针判断
        ListNode* cur = head;
        while(cur){
            nums.emplace_back(cur->val);
            cur = cur->next;
        }
        for(int i=0, j=nums.size()-1; i < j; i++, j--){
            if(nums[i]!=nums[j]) return false;
        }
        return true;
    }
};
//方法二,空间复杂度O(1)
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        if(!head) return true;
        ListNode* end = findend(head);
        ListNode* head1 = reverseList(end->next);
        ListNode* cur1 = head;
        ListNode* cur2 = head1;
        while(cur1&&cur2){
            if(cur1->val!=cur2->val) return false;
            cur1 = cur1->next;
            cur2 = cur2->next;
        }
        end->next = reverseList(head1);  //恢复链表
        return true;
    }
    //寻找链表前半部分的末尾节点
    ListNode* findend(ListNode* head){
        ListNode* slow = head;
        ListNode* fast = head;
        while(fast->next&&fast->next->next){
            fast = fast->next->next;
            slow = slow->next;
        }
        return slow;
    }
  //翻转链表
   ListNode* reverseList(ListNode* head){
        ListNode* pre = nullptr;
        ListNode* cur = head;
        ListNode* tmp;
        while(cur){
            tmp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = tmp;
        }
        return pre;
    }
};

标签:head,判断,ListNode,cur,next,链表,return,回文
From: https://www.cnblogs.com/fly-smart/p/18064809

相关文章

  • delphi 判断类是否实现接口,获取类实现的接口
    判断类是否实现接口,获取类实现的接口代码typeICeShi=interface['{37CABB9D-CAA2-4589-A0C8-5AA1424E525B}']functionToPrint:string;end;TCeShi=class(TInterfacedObject,ICeShi)functionToPrint:string;end;procedureTForm1.Button1Cli......
  • Scanner对象、进阶与判断浅学
    前言之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特征,我们可以通过scanner类来获取用户的输入基本语法代码Scannerstr=newScanner(System.in);通过Scan......
  • dataset 判断整列是否有重复,找出重复数据
    DataTabledt=ds.Tables[0];DataViewdv=newDataView(dt);if(dv.Count!=dv.ToTable(true,jsonColumnNameNo).Rows.Count){......
  • 通达信金股分时分时副图判断机构买盘掌握精准介入时机
    {通达信金股分时分时副图判断机构买盘掌握精准介入时机} 成交额:=V*C/100,NODRAW;A2:=SUM((IF(((成交额/8>20)AND(CLOSE>(REF(CLOSE,1)))),成交额,0)),0); A3:=SUM((IF(((成交额/8>20)AND(CLOSE<(REF(CLOSE,1)))),成交额,0)),0); A4:=SUM((IF(((成交额/8......
  • 131. 分割回文串c
    这题真的坑爹啊,不明白为什么会产生万大小的数据啊。/***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothreturnedarrayand*columnSizesarraymustbemalloced,assumecallerca......
  • 探索数据结构:单链表的实战指南
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点
    24.两两交换链表中的节点https://leetcode.cn/problems/swap-nodes-in-pairs/description/publicListNodeswapPairs(ListNodehead){if(head==null||head.next==null)returnhead;ListNoderes=head.next;ListNodepre=newListNod......
  • 信用评级接口:帮助您判断合作风险和信用等级
     在商业合作中,了解对方企业的信用状况是非常重要的。借助现代科技的力量,我们可以通过信用评级接口来获取企业的信用评级结果和信用分数,从而对合作风险进行评估和判断。本篇博文将为大家介绍如何使用信用评级接口,并对其代码进行详细说明。首先,请让我简要介绍一下信用评级接口的......
  • leedcode-移除链表元素
    自己写的:#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defremoveElements(self,head:Optional[ListNode],val):#初始化一个......
  • C 语言整数单链表的表示和实现 数据结构课程设计报告
     数据结构课程设计报告专业名称:计算机科学与技术 课程名称:数据结构        实训题目:整数单链表的表示和实现                           实训环境:C语言实现(DevC++)                    ......