【nowcoder】链表的回文结构

牛客题目链接 链表的回文结构
在这里插入图片描述

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
#include <cstdlib>
// 建议大伙自己对照我的代码画下图,假设A链表是:1 2 3 2 1
class PalindromeList {
public:bool chkPalindrome(ListNode* A) { // 空间复杂度O(1)// 找到中间节点 (slow是3)ListNode* slow = A, * fast = A;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}// 反转后半部分 //(3 2 1变成1 2 3,但是A并没有变成1 2 1 2 3,A这时是1 2 3,自己画下图就知道了)ListNode* cur = NULL, * next = NULL;while (slow) {next = slow->next;slow->next = cur;cur = slow;slow = next;}// 前半部分和后半部分比较 (next = A = 1 2 3,cur = 1 2 3)next = A;while (cur) {if (next->val != cur->val) {return false;}next = next->next;cur = cur->next;}return true;}bool chkPalindrome_(ListNode* A) { // 空间复杂度O(n)// 1.创建B链表,将A链表节点依次向B链表头插ListNode* B = NULL;ListNode* curA = A;while (curA) {ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));newNode->val = curA->val;newNode->next = NULL;if (B == NULL) {B = newNode;}else {newNode->next = B;B = newNode;}curA = curA->next;}// 2.比较curA = A;ListNode* curB = B;while (curA) {if (curA->val != curB->val) {return false;}curA = curA->next;ListNode* del = curB;curB = curB->next;free(del);del = NULL;}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427119.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript进阶:WebAPIs重点知识整理3

1 本地存储 存储容量大&#xff1a;约5M 1.1 localStorage 1.1.1 存储 localStorage.setItem(username,张三) localStorage.setItem(password,123456) 1.1.2 获取 console.log(localStorage.getItem(username)) 1.1.3 删除 localStorage.removeItem(username) 1.2 session…

【业务功能篇133】 Mysql连接串优化性能问题

rewriteBatchedStatementstrue开启了MySQL驱动程序的批量处理功能。 spring.datasource.urljdbc:mysql://localhost:3306/mydatabase?rewriteBatchedStatementstrue 在MyBatis Plus框架中&#xff0c;批量插入是一种高效的数据库操作方式。通过开启rewriteBatchedStatementstr…

栈实现队列(附带源码)

一、思路图解 首先&#xff0c;队列&#xff1a;先进先出 栈&#xff1a;先进后出 那么&#xff0c;怎么用栈实现队列呢&#xff1f; 很简单&#xff0c;首先&#xff0c;创建两个栈 一个叫pushsatck,用来入队列 一个叫popstack,用来出队列 队列的核心在于先进先出&#xf…

2024.1.24 C++QT 作业

思维导图 练习题 1.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 #include <iostream> #include <string.h> #include <array> using namespace std;int main() {string str;cout << "…

Linux shell编程学习笔记41:lsblk命令

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战&#xff0c;但同时也带来了更强的实时性和本地处理能力&#xff0c;为企业降低了成本和压力&#xff0c;提高了数据处理效率。因此&#xff0c;边缘计算既带来了挑战也带来了机遇&#xff0c;需要我…

【Java】Java JSR303应用解决数据校验问题,解放双手

文章目录 JSR303Hibernate 对其实现应用进阶-注解分组使用首先声明两个空接口为实体类上的注解添加接口标记controller具体的接口方法添加分组标记 异常类搭配使用说明&#xff1a; JSR303 JSR是Java Specification Requests的缩写&#xff0c;意思是Java 规范提案。是指向JCP…

线性表--链表--带头双向循环链表

目录 1.什么是带头双向循环链表&#xff1f; 2.实现增删查改功能&#xff1a; 2.1使用链表前必须对头节点初始化 2.2尾插 2.3尾删 2.4头插 2.5头删 2.8查找 2.7指定位置插入 2.8指定位置删除 2.9改变数据 ​编辑 2.10打印 2.11销毁 3.代码 1.什么是带头双向循环链表&…

openGauss学习笔记-206 openGauss 数据库运维-常见故障定位案例-too many clients already

文章目录 openGauss学习笔记-206 openGauss 数据库运维-常见故障定位案例-too many clients already206.1 高并发报错“too many clients already”或无法创建线程206.1.1 问题现象206.1.2 原因分析206.1.3 处理办法 openGauss学习笔记-206 openGauss 数据库运维-常见故障定位案…

安卓移动设备使用DS file文件管理工具远程访问本地群晖NAS文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接6. 结语 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用…

C++基础学习

在我们学习类之前我们先学习下其他几个相关的知识点. 一.内联函数 定义&#xff1a; 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率 如果你想去查看&…

栈实现队列, 队列实现栈

栈实现队列 实现方式&#xff1a; 代码&#xff1a; public class MyQueue {private Stack<Integer> offerStack;// 入队栈private Stack<Integer> pollStack;// 出队栈public MyQueue() {offerStack new Stack<>();pollStack new Stack<>();}// 入…

力扣 | 240. 搜索二维矩阵 II

不难想到二分查找的思想&#xff0c;但是这道题目还可以利用有序大大减少代码量 package com.douma._8_day_二分查找._240;public class _240_search_a_2d_matrix_ii {// 暴力解法// 时间复杂度 O(mn)// 空间复杂度 O(1)public boolean searchMatrix1(int[][] matrix, int targ…