【OJ】牛客链表刷题

题目

  • 1. 链表分割
    • 1.1 题目分析
    • 1.2 代码
  • 2. 链表的回文结构
    • 2.1 题目分析
    • 2.2 代码

这里两道与链表有关的题目均来自牛客。

1. 链表分割

在这里插入图片描述

1.1 题目分析

因为这里代码不能选择用c语言写,所以选择用c++,因为c++兼容c。
题目要求分割链表,我们可以直接弄成两个带哨兵位的链表,这样插入时就不用判断链表里面有没有节点。

    head1=tail1=(ListNode*)malloc(sizeof(ListNode));head2=tail2=(ListNode*)malloc(sizeof(ListNode));

一个链表放小于x的节点,直接用尾插就能实现,

          if(cur->val<x){tail1->next=cur;tail1=tail1->next;}

另一个链表放大于等于x的节点,也使用尾插入。

 else {tail2->next=cur;tail2=tail2->next;}

最后把两个链表连接就行,

tail1->next=head2->next;

连接之后不要忘记把链表2的尾节点置空tail2->next=NULL,返回没有哨兵位的头节点pHead=head1->next,而头节点是我们自己在做的时候申请的,不要忘记free

free(head1);
free(head2);

1.2 代码

class Partition {public:ListNode* partition(ListNode* pHead, int x) {// write code hereListNode* cur=pHead;ListNode* head1, *tail1,*head2,*tail2;head1=tail1=(ListNode*)malloc(sizeof(ListNode));head2=tail2=(ListNode*)malloc(sizeof(ListNode));while(cur){if(cur->val<x){tail1->next=cur;tail1=tail1->next;}else {tail2->next=cur;tail2=tail2->next;}cur=cur->next;}tail1->next=head2->next;tail2->next=NULL;pHead=head1->next;free(head1);free(head2);return pHead;}
};

在这里插入图片描述

2. 链表的回文结构

这里同样是不能选择用c语言写,所以选择用c++,因为c++兼容c。
在这里插入图片描述

2.1 题目分析

我们先搞清楚什么是回文结构,回文结构简单来说就是对称,看题目给的例子1 2 2 1,是不是就是第一个与最后一个是相等的,第二个与倒数第二个是相同的,题目这个给的是数为偶数的情况。为奇数也是一样的像1 2 3 2 1,也是一样的道理。
那么我们是不是就可以想到把原链表拆为两部分,把后边部分逆置一下,再与前半部分比较就行了。
这里得计算哪里开始是后半段,这里就得用到快慢指针,不管是奇数个还是偶数个,把中间位置的节点放在新链表中,最后与拆后的链表比较完,就算新链表还剩下一个,拆后的已经比较完了,就说明还是回文结构。
慢指针slow走一步,快指针走两步,当快指针fast走完或者快指针fast的next为空就结束,返回慢指针指向的位置。这里得重新写一个函数,返回慢指针。

       struct ListNode* MidNode(ListNode* A) {ListNode* slow = A, *fast = A;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}return slow;}

然后在新链表开始进行头插,返回新链表的头节点,也直接写一个

struct ListNode* NewList(struct ListNode* A) {ListNode* cur = A;ListNode* newhead;while (cur) {ListNode*next=cur->next;cur->next=newhead;newhead=cur;cur=next;}return newhead;}

再将新链表与拆了的链表进行比较。

       bool chkPalindrome(ListNode* A) {struct ListNode* mid=MidNode(A);struct ListNode* newhead=NewList(mid);while(A&&newhead){if(A->val!=newhead->val)return false;A=A->next;newhead=newhead->next;}return true;

2.2 代码

class PalindromeList {public:struct ListNode* NewList(struct ListNode* A) {ListNode* cur = A;ListNode* newhead;while (cur) {ListNode*next=cur->next;cur->next=newhead;newhead=cur;cur=next;}return newhead;}struct ListNode* MidNode(ListNode* A) {ListNode* slow = A, *fast = A;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}return slow;}bool chkPalindrome(ListNode* A) {struct ListNode* mid=MidNode(A);struct ListNode* newhead=NewList(mid);while(A&&newhead){if(A->val!=newhead->val)return false;A=A->next;newhead=newhead->next;}return true;// write code here}
};

在这里插入图片描述

有问题请指出,大家一起进步!

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

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

相关文章

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践

目录 前言 一、Leaflet.CanvasLabel 1、开源地址 2、设置参数说明 二、组件集成 1、新建html文件 2、声明样式 3、定义矢量文本渲染器 4、定义地图 5、添加矢量数据 6、最终效果 总结 前言 在一般的业务场景中&#xff0c;针对小量的矢量数据&#xff0c;比如POI兴…

云轴科技ZStack位列IDC云系统软件市场教育行业TOP2

近日&#xff0c;全球IT市场研究和咨询公司IDC发布 《中国云系统软件市场跟踪报告2023H1》 ZStack作为产品化的云基础软件提供商 位居云系统软件市场第一梯队 市场份额位列独立云厂商*第一 营收同比增速最快 教育行业TOP2 在教育行业&#xff0c;云计算已成为教育行业信息化的…

Python 安装 QtDesigner

Python 安装 QtDesigner 对于最新版本的 PyQt6 模块&#xff0c;可以直接使用如下代码来安装 Designer 软件。 pip install PyQt6-tools 安装好以后&#xff0c;需要到 Python 安装目录中寻找对应的启动 exe 文件。 C:\Softwares\Python 3.11.5\Lib\site-packages\qt6_applica…

[小程序]页面事件

一、下拉刷新 1.开启和配置 小程序中开启下拉刷新的方式有两种&#xff1a; ①全局开启下来刷新 在app.json的window节点中&#xff0c;设置enablePullDownRefresh设为ture。 ②局部开启下来刷新 在页面对应的json文件的的window节点中&#xff0c;设置enablePullDownRefresh设…

Qt应用开发(安卓篇)——Hello Qt On Android

一、前言 这一篇从实际出发&#xff0c;讲述如何创建、编译和部署Qt On Android项目。 二、ADB调试 ADB的全称为Android Debug Bridge&#xff0c;就是起到调试桥的作用&#xff0c;主要用于连接计算机与Android 设备&#xff0c;以便进行调试和数据传输。ADB 可以实现以下主要…

uniapp组件库SwipeAction 滑动操作 使用方法

目录 #平台差异说明 #基本使用 #修改按钮样式 #点击事件 #API #Props #Event 该组件一般用于左滑唤出操作菜单的场景&#xff0c;用的最多的是左滑删除操作。 注意 如果把该组件通过v-for用于左滑删除的列表&#xff0c;请保证循环的:key是一个唯一值&#xff0c;可以…

HNU-数据挖掘-实验3-图深度学习

数据挖掘课程实验实验3 图深度学习 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验3 图深度学习实验背景实验要求数据集解析实验内容&#xff08;0&#xff09;基础知识&#xff1a;基于图的深度学习方法浅识&#xff1a;图卷积网络 (GCN)浅识&…

【Linux】第三十二站:命名管道

文章目录 一、命名管道介绍二、编码1.mkfifo2.unlink3.一个简单的例子4.修改 一、命名管道介绍 管道应用的一个限制就是只能在具有共同祖先&#xff08;具有亲缘关系&#xff09;的进程间通信。 如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件来做这项工作…

14 STM32 - IIC (时序图+软件源码)

14.1 IIC简介 IIC&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;中文集成电路总线&#xff0c;是一种串行通信总线&#xff0c;使用多主从架构。I2C串行总线一般有两根信号线&#xff0c;一根是双向的数据线SDA&#xff0c;另一根是时钟线SCL。所有接到I2C总线…

【蓝桥杯备赛Java组】语言基础|竞赛常用库函数|输入输出|String的使用|常见的数学方法|大小写转换

&#x1f3a5; 个人主页&#xff1a;深鱼~&#x1f525;收录专栏&#xff1a;蓝桥杯&#x1f304;欢迎 &#x1f44d;点赞✍评论⭐收藏 目录 一、编程基础 1.1 Java类的创建 1.2 Java方法 1.3 输入输出 1.4 String的使用 二、竞赛常用库函数 1.常见的数学方法 2.大小写转…

邦芒支招:避免薪资谈崩的六个措施

对于求职者而言&#xff0c;我喜欢把回答薪资问题比喻成玩扑克牌&#xff0c;它的目标就是让招聘方先亮出底牌。其原因在于&#xff0c;正如詹姆斯察觉到的&#xff0c;一旦你暴露了具体的薪资数目&#xff0c;你就会陷入要价太高(或者太低)的境地。 以下这些小技巧也许能为…

函数传参之按值传递

定义&#xff1a;所有函数的参数都是按值传递的&#xff0c;这意味着函数外的值被会被赋值到函数内部的参数中&#xff0c;就像从一个变量赋值到另外一个变量一样 **原始值&#xff1a;那么久跟原始值变量的复制一样** **引用值&#xff1a;那么久跟引用值复制一样**变量有按值…

php基础学习之代码框架

一&#xff0c;标记 脚本标记&#xff08;已弃用&#xff09;&#xff1a;<script language"php"> php代码 </script> 标准标记&#xff1a;<?php php代码 ?> 二&#xff0c;基础输出语句 不是函数&#xff0c;…

国内比较好的sap实施商有哪些?

在当今数字化浪潮的推动下&#xff0c;企业的数字化转型已成为企业竞争力的关键因素。而在众多企业应用软件中&#xff0c;SAP&#xff08;系统应用和产品&#xff09;作为全球的企业资源规划&#xff08;ERP&#xff09;解决方案供应商&#xff0c;扮演着至关重要的角色。然而…

javascript设计模式-应用示例

事件工具类 /* addEvent: simplified event attachment */ function addEvent( obj, type, fn ) {if (obj.addEventListener) {obj.addEventListener( type, fn, false );EventCache.add(obj, type, fn);}else if (obj.attachEvent) {obj["e"typefn] fn;obj[typefn…

【WSL】[出现错误 2147944320 (0x80070780) (启动“ubuntu.exe”时)]

问题描述 在尝试启动 Windows Subsystem for Linux (WSL) 的 “ubuntu.exe” 时&#xff0c;可能会遇到以下错误&#xff1a; [出现错误 2147944320 (0x80070780) (启动“ubuntu.exe”时)]错误的截图如下&#xff1a; 原因分析 系统找不到指定的文件。在这种情况下&#xff…

Git提交 ssh: connect to host github.com port 22: Connection timed out解决方案

你们好&#xff0c;我是金金金。 场景 之前都是好好的&#xff0c;不知道今天为什么提交代码就这样了 排查 根据英文可以看出&#xff0c;ssh端口号被拒绝了&#xff0c;22号端口不行&#xff0c;那就换一个端口 造成error的原因 ssh端口被拒绝 解决 找到.ssh文件&#xff…

CLion调试Nodejs源码

【环境】 macOS node-v20.11.0源码 CLion 2023.3.2 【1】下载源码 https://nodejs.org/en/download/ 【2】编译源码 解压后的目录如下 进入解压后的目录进行编译 ./configure --debug make -C out BUILDTYPEDebug -j 4需要好久… 编译成功之后在node-v20.11.0目录下会有一个…

【Web实操11】定位实操_照片墙(无序摆放)

设置一个板块&#xff0c;将照片随意无序摆放在墙上&#xff0c;从而形成照片墙。本来效果应该是很唯美好看的&#xff0c;就像这种&#xff0c;但是奈何本人手太笨&#xff0c;只好设置能达到照片墙的效果就可。 代码如下&#xff1a; <!DOCTYPE html> <html lang&…

SpringBoot整理-Spring Boot配置

Spring Boot 的配置系统是其核心功能之一,旨在简化 Spring 应用的配置过程。Spring Boot 提供了一种灵活的方式来配置你的应用,无论是通过外部配置文件,环境变量,命令行参数还是在代码中直接配置。以下是关于 Spring Boot 配置的几个重要方面: 配置文件 application.prope…