数据结构——链表题目

文章目录

  • 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;在山西闻喜县裴…

处理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…

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;…

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

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

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

面试的时候经常会被问到在接口自动化测试&#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;利用…

JavaScript 数组方法 reduce() 的用法

一、概述 在JavaScript中&#xff0c;reduce()方法是一个非常实用的数组方法&#xff0c;它接收一个函数作为累加器&#xff08;accumulator&#xff09;&#xff0c;数组中的每个值&#xff08;从左到右&#xff09;开始缩减&#xff0c;最终为一个值。这个方法在处理数组…

OpenTelemetry系列 - 第4篇 OpenTelemetry K8S生态

目录 一、【Helm】添加OTel Helm repo二、【Helm Chart】OTel Collector2.1 daemonset2.2 deloyment 三、【K8S Operator】OTel Operator3.1 安装OTel Operator3.2 部署OpenTelemetryCollector3.2.1 Deloyment Mode3.2.2 DeamonSet Mode3.2.3 StatefulSetMode3.2.4 Sidecar Mod…

基于SUMO和强化学习的交通优化

本文旨在解释强化学习方法如何通过 TraCl 与 SUMO 配合使用&#xff0c;以及这如何有利于城市交通管理和自动驾驶车辆的路径优化。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REV…

Node包管理工具 - nvm、npm、yarn、cnpm、pnpm

转载说明 原文地址 简介 nvm : 可以实现一台电脑&#xff0c;拥有多个版本的Node npm : node package manager 下载Node后自带的一个包管理工具 yarn : npm 的升级版&#xff0c;更优秀 cnpm : 配置下载非官方地址的依赖&#xff08;淘宝、华为、腾讯镜像&#xff09; pnpm :…

day70

今日回顾 session 中间件 auth session Cookie虽然在一定程度上解决了“保持状态”的需求&#xff0c;但是由于Cookie本身最大支持4096字节&#xff0c;以及Cookie本身保存在客户端&#xff0c;可能被拦截或窃取&#xff0c;因此就需要有一种新的东西&#xff0c;它能支持更…

辛普森距离(SD,Sampson Distance)

定义 Sampson误差是复杂性介于代数误差和几何误差之间&#xff0c;但非常近似于几何误差的一种误差。 应用 SLAM对极几何中使用到SD来筛选内点&#xff1a; 1.随机采样8对匹配点 2.8点法求解基础矩阵 ​&#xff1b; 3.奇异值约束获取基础矩阵F&#xff1b; 4.计算误差&…

通达信指标公式19:龙虎榜股票池——主力控盘度的计算方法

0.小红牛本指标&#xff0c;选股的思路说明&#xff1a;控盘度&#xff0c;又称主力控盘&#xff0c;是指主力控制了某只股票的大部分流通股&#xff0c;从而控制了股票的价格。主力控盘的目的通常是为了获取更多的收益&#xff0c;通过控制股票价格来实现其策略。所以首要分析…