数据结构——链表题目

文章目录

  • JZ25 合并两个排序的链表(简单)
  • NC22 合并两个有序的数组(简单)
  • NC3 链表中环的入口节点(中等)
  • NC50 链表中的节点每k个一组翻转(中等)
  • NC53 删除链表的倒数第n个节点(中等)


JZ25 合并两个排序的链表(简单)

链接 简单题
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

输入:
{1,3,5},{2,4,6}
返回值:
{1,2,3,4,5,6}

解题思路
有递归和非递归两种思路
思路一:递归
在这里插入图片描述

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
//递归的解法
class Solution {
public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {ListNode* tmp = nullptr;if(pHead1 == nullptr) return pHead2;if(pHead2 == nullptr) return pHead1;if(pHead1->val <= pHead2->val){tmp = pHead1;tmp->next = Merge(pHead1->next,pHead2);}else{tmp = pHead2;tmp->next = Merge(pHead1,pHead2->next);}return tmp;}
};

解法二:非递归解法
在这里插入图片描述
在这里插入图片描述

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};*/
class Solution {
public:ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {ListNode* i = pHead1, * j = pHead2;if(i == nullptr) return pHead2;if(j == nullptr) return pHead1;ListNode node(-1);ListNode* tmp = &node;while(i != nullptr && j != nullptr){if(i != nullptr && i->val <= j->val) {tmp->next = i;i = i->next;tmp = tmp->next;}if(i == nullptr){tmp->next = j;break;}if(j != nullptr && i->val > j->val){tmp->next = j;j = j->next;tmp = tmp->next;}if(j == nullptr){tmp->next = i;break;} }return node.next;}
};

NC22 合并两个有序的数组(简单)

链接 简单题
题目描述
在这里插入图片描述
在这里插入图片描述
解题思路
在这里插入图片描述

class Solution {
public:void merge(int A[], int m, int B[], int n) {int pos = m + n - 1;int i = m-1,j = n-1;while(pos > 0 && i >= 0 && j >= 0){
//             if(A[i] >= B[j])
//             {
//                 A[pos] = A[i];
//                 pos--;
//                 i--;
//             }//             else{
//                 A[pos] = B[j];
//                 pos--;
//                 j--;
//             }A[pos--] = (A[i] >= B[j] ? A[i--] : B[j--] );}while(i >= 0)A[pos--] = A[i--];while(j >= 0)A[pos--] = B[j--];}
};

NC3 链表中环的入口节点(中等)

链接 难度:中等
描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
在这里插入图片描述
解析
双指针法:
假设一圈相遇a+b+c+b=2(a+b) 所以a = c

在这里插入图片描述


class Solution {
public:ListNode* EntryNodeOfLoop(ListNode* pHead) {if(pHead == nullptr || pHead->next == nullptr)return nullptr;ListNode* fast = pHead;ListNode* slow = pHead;//找到相遇的点while(fast != nullptr && fast->next != nullptr){fast = fast->next->next;slow = slow->next;if(fast == slow)break;}//将fast指针指向头结点if(fast != nullptr && fast->next != nullptr)fast = pHead;elsereturn nullptr;while(fast != slow){fast = fast->next;slow = slow->next;}return fast;  //再次找到相遇点就是环的入口点}
};

哈希法:
遍历单链表的每个结点
如果当前结点地址没有出现在set中,则存入set中
否则,出现在set中,则当前结点就是环的入口结点
整个单链表遍历完,若没出现在set中,则不存在环


class Solution {
public:ListNode* EntryNodeOfLoop(ListNode* pHead) {if(pHead == nullptr) return nullptr;ListNode* cur = pHead;set<ListNode*> myset;while(cur != nullptr){if(myset.count(cur) != 0)return cur;myset.insert(cur);cur = cur->next;}return nullptr;}
};

NC50 链表中的节点每k个一组翻转(中等)

链接 难度:中等
题目描述
在这里插入图片描述

解析

把 k 个数压入栈中,然后弹出来的顺序就是翻转的! 这里要注意几个问题:
第一,剩下的链表个数够不够 k 个(因为不够 k 个不用翻转);
第二,已经翻转的部分要与剩下链表连接起来。


/*** struct ListNode {*	int val;*	struct ListNode *next;* };*/class Solution {
public:/*** * @param head ListNode类 * @param k int整型 * @return ListNode类*/ListNode* reverseKGroup(ListNode* head, int k) {// write code hereif (head == nullptr || k <= 1) return head;ListNode* cur = head;   //cur用来标志当前的位置ListNode node(-1);ListNode* tmp = &node;  //tmp指向的是新链表stack<ListNode*> st;//循环原有链表while(cur != nullptr){int count = 0; //计数//入栈操作while(count < k && cur){st.push(cur);cur = cur->next;count++;}//正常的出栈操作while(k == count && !st.empty()){tmp->next = st.top();st.pop();tmp = tmp->next;}//最后一段的操作if(count != k){tmp->next = head;  break;}//重置下一次操作的初始结点 //这个非常重要,如果没有这个,测试用例[1,2],2就通过不了,因为二者成为了闭环//tmp指向的一直都不是空,这时候cur为空了,所以这次结束就把tmp->next置为空tmp->next = cur;   head = cur;}return node.next;        }
};

NC53 删除链表的倒数第n个节点(中等)

题目描述
给定一个链表,删除链表的倒数第 nn 个节点并返回链表的头指针
例如,
给出的链表为: 1\to 2\to 3\to 4\to 51→2→3→4→5, n= 2n=2.
删除了链表的倒数第 nn 个节点之后,链表变为1\to 2\to 3\to 51→2→3→5.

备注:
题目保证 nn 一定是有效的
请给出时间复杂度为\ O(n) O(n) 的算法
解题思路
利用快慢指针


class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {// write code hereif(head == nullptr && n <= 0) return head;ListNode* fast = head;ListNode* slow = head;//先让快慢指针保持n距离while(n && fast){fast = fast->next;n--;}//n > 0说明链表的长度没有n大if(n > 0)return head;if(fast == nullptr)    //fast == nullptr倒数第n个节点刚好是第一个结点return head->next;while(fast->next != nullptr) //大部分的情况{slow = slow->next;fast = fast->next;}slow->next = slow->next->next;;return head;}
};

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

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

相关文章

独立开发者都使用了哪些技术栈?

目录 一、前言 架构展示&#xff1a; 技术栈展示&#xff1a; 二、JNPF-JAVA-Cloud微服务 1.后端技术栈 2. 前端技术栈 Vue3技术栈 3. 数据库支持 一、前言 像独立开发者这类人群&#xff0c;也可以把他们理解为个人开发者/自由职业者。有一组数据显示&#xff0c;在美国&#…

冰 蝴 蝶

“冰蝴蝶”是一种自然景观&#xff0c;出现在每年的12月至次年2月间。在温度、湿度、风力、风向合适时&#xff0c;在山野间的枯草或灌木丛上会结出如“蝴蝶”一样的纤薄冰片&#xff0c;因此被称为“冰蝴蝶”。 受持续降温影响&#xff0c;12月3日&#xff0c;在山西闻喜县裴…

python实现FINS协议的UDP服务端

python实现FINS协议的UDP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样&#xff0c;可以使用现成的pymodbus模块去实现。但是&#xff0c;我们可以根据协议帧进行组包&#xff0c;自己去实现帧的格式&#xff0c;而这一切可以基于socket模块。本文基于原先 FINS协议的TCP…

处理k8s中创建ingress失败

创建ingress&#xff1a; 如果在创建过程中出错了&#xff1a; 处理方法就是&#xff1a; kubectl get ValidatingWebhookConfiguration kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission 然后再次创建&#xff0c;发现可以&#xff1a;

spdlog 简介与基础示例

0. 概况 0.1 源码搭建环境 源码网址&#xff1a; GitHub - gabime/spdlog: Fast C logging library. 可以只是用头文件&#xff0c;也可以先编译后使用&#xff1b;后面的示例都是直接使用头文件的方式。 编译方法&#xff1a; $ git clone https://github.com/gabime/spd…

推荐5个节省90%精力的GitHub工具库

下面五个GitHub工具库可节约你大部分时间&#xff0c;提升效率&#xff1a; 1、Trigger.dev 如果您有长时间运行的作业&#xff0c;请在应用中实现Trigger。 使用 API 集成、Webhooks、调度和延迟等功能直接在代码库中创建长时间运行的作业。 例如&#xff0c; 当用户升级他们…

vscode创建python虚拟环境

一、创建虚拟环境 python -m venv vsvenv 二、激活虚拟环境 cd .\myvenv\Scripts.\Activate.ps1 如果出现下图所示&#xff1a; 1、使用管理员运行PowerShell 2、输入命令&#xff1a;Get-ExecutionPolicy 3、输入命令&#xff1a;Set-ExecutionPolicy RemoteSigned&…

嵌入式设备里,SOC与MCU的区别是什么?

今日话题&#xff0c;嵌入式设备里&#xff0c;SOC与MCU的区别是什么?MCU与SOC有着明显的区别。MCU是嵌入式微控制器&#xff0c;而SOC则是片上系统。虽然这两者看似只有一个"嵌入式系统"的区别&#xff0c;但实际上在软件和硬件方面存在显著差异。首先&#xff0c;…

探索医学影像:如何通过ROI灰度直方图和ROI区域方格图揭示隐秘细节?

一、引言 医学影像是现代医学诊断的重要手段&#xff0c;其中nrrd文件格式作为一种常见的医学影像数据存储方式&#xff0c;被广泛应用于各种医学影像设备和软件中。这种文件格式具有丰富的元数据信息&#xff0c;可以精确记录影像的空间位置、方向和尺度等信息&#xff0c;对于…

CentOS7安装最新版本git

CentOS7上的git是1.8.3.1&#xff0c;比较老&#xff0c;使用体验不好。下载源码来升级一下。 sudo yum -y install dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel sudo yum -y iinstall asciidoc xmlto docbook2X sudo yum -y in…

StarGAN 使用指南:一个模型实现多个域的迁移

StarGAN 使用指南 网络结构多数据集训练使用指南StarGAN v2 论文地址&#xff1a;https://arxiv.org/pdf/1711.09020.pdf 我们有猫的图片集、狗的图片集和兔子的图片集。 目标是让猫的图片看起来像狗的图片&#xff0c;狗的图片看起来像兔子的图片&#xff0c;兔子的图片看起…

什么情况下要使用迷宫式油封?

在机械领域&#xff0c;选择正确的密封件可以显着影响设备的效率和寿命。一种这样的密封件是迷宫式油封。本文将探讨迷宫式油封会在哪些场景下使用。 迷宫式油封是一种非接触式密封件&#xff0c;可提供曲折的路径或“迷宫”&#xff0c;以帮助防止油等流体泄漏。与其他密封件…

【开源视频联动物联网平台】J2mod库写一个Modbus TCP 服务器

j2mod 是一个用于 Modbus 通信协议的 Java 库&#xff0c;可以用来创建 Modbus TCP 服务器。以下是一个简单的示例代码&#xff0c;演示如何使用 j2mod 创建一个 Modbus TCP 服务器。 首先&#xff0c;确保你已经添加 j2mod 库到你的项目中。你可以从 j2mod 的官方网站&#x…

HarmonyOS三方库涵盖了7大类

✍️作者简介&#xff1a;大鹏编码&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、知乎、简书、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f449;关注✨、点赞…

面试前自测题,接口自动化测试过程中怎么处理接口依赖?

面试的时候经常会被问到在接口自动化测试&#xff0c;过程中怎么处理接口依赖&#xff1f;首先我们要搞清楚什么是接口依赖。 前言 01.什么是接口依赖 接口依赖指的是&#xff0c;在接口测试的过程中一个接口的测试经常需要依赖另一个或多个接口成功请求后的返回数据。 那怎么…

Stable Diffusion WebUI训练Lora测试XYZ显示例图

方式一 1.1 选择模型放入目录 将模型放入sd项目的models\Lora\目录,尽量保持和其他模型分开。 sd中显示如下: 1.2 脚本X/Y/Zplot选择 X轴类型:提示词搜索/替换 X轴值:NUM,000001,000002, 000003, 000004, 000005, 000006, 000007, 000008, 000009, 000010 Y轴类型:提…

Mysql进阶-事务锁

前置知识-事务 事务简介 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 就比如: 张三给李四转账1000块钱&#xff0…

文件下载保存接口的创建_FastAPI

文件下载保存接口的创建 功能描述实现代码功能演示 功能描述 在网页上对数据进行下载保存处理。例如点击网页上的保存按钮&#xff0c;会把文件下载到本地。下面就是对下载保存功能的实现。 实现代码 gpt_router.get("/export_data") async def export_data():# 需…

应用在触摸开关触控屏中的电容式触摸芯片

触摸开关是一种电子开关&#xff0c;使用时轻按开关按钮即可打开开关。松开手时&#xff0c;开关断开&#xff0c;内部结构由金属弹片受力弹动断开或者由电容值&#xff0c;电阻值等电气参数改变而控制。触摸开关一般是指应用触摸感应芯片原理设计的一种墙壁开关&#xff0c;是…

nginx部署和安装-后端程序多端口访问-后端代理设置

部分补充 查看nginx是否安装http_ssl_module模块 ./nginx -V 看到有 configure arguments: --with-http_ssl_module, 则已安装。 如果没有安装&#xff1a;参考文档 nginx官网地址&#xff1a;nginx: download 这里下载nginx-1.18.0稳定版tar.gz 下载后&#xff0c;利用…