当前位置: 首页 > news >正文

刷题 - 数据结构(二)链表

1. 链表

1.1 题目:合并两个有序链表

  1. 链表的建立与插入:关键在于留出头部,创建迭代指针。
    ListNode* head = new ListNode; // 通过new 创建了一个数据类型为ListNode的数据 并把该数据的地址赋值给ListNodeListNode* p = 0; // 再创建一个数据类型为ListNode的数据 并把该数据的地址赋值给ListNodep = head; // 把head 里面的地址赋值给p

完整的代码


作者:小陈写不完代码
链接:https://zhuanlan.zhihu.com/p/365219765
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。#include<iostream>
#include<string>
using namespace std;
struct node
{string name;int score;node* next;
};
node* creatList(); // 创建了一个返回值为指向数据类型为node的执政,即返回的是一个地址
int main()
{node* head=creatList();
}
node* creatList()
{node* head = new node; // 通过new 创建了一个数据类型为node的数据 并把该数据的地址赋值给nodenode* p= new node; // 再创建一个数据类型为node的数据 并把该数据的地址赋值给nodep=head; // 把head 里面的地址赋值给pp->next=NULL; //这里把p指向的数据类型为node的数据里的 指针next指向了空.指针必须有对象 即指向一个地方,你不告诉它 它就乱跑 所以一般都是让它空着while (true) // 这里我选择while循环 因为里面是true 所以会一直进行 ,我们在里面使用条件判断加break跳出来{cout<<"Please enter student name: ";cin>>p->name; // 录入学生的姓名cout<<"Please enter student score: ";cin>>p->score; // 输入学生的分数if(p->score <0){break; // 如果分数小于0 跳出循环即输入结束.}node*q =new node; // 没有跳出循环 即继续输入,这时我们再创建一个这些数据类型为node的数据 并把它的地址赋值给 指针变量 q .p->next=q; // 刚刚p指针指向的数据类型为node的数据里的 指针next 指向 q ,节点p 和 节点q连起来了..q->next=NULL; // 指针q指向的数据类型为node的数据里的指针 next 指针也不能乱指,所以我们让它指向 NULLp=q; // 这里我当初就搞了很长时间.还记的嘛 p 和 q 是什么 ,它们两都是指针变量.它们里面放的是地址,而且它们里面的地址是可以给其它的指向相同数据类型的指针的,这里我们把q里面的地址 给了p 这样p里面存放的地址就是这个链表的最后一个节点的地址.如此反复我们就实现了动态输入.}return head; // 这就是为什么我们要设置head了,因为p的地址是不断变化的,而head里面的地址是不变的.而且head里面放的就是第一个节点的地址,
}
  1. 依据数组创建列表的时候,需要考虑到:函数内部不好获得数组的长度。sizeof 的方法卸载main中可以,但是对于函数的形参指针就不行了。
    解决方法:类模板+引用。
template<class T>
void arr(T &a)
{int n = sizeof(a) / sizeof(a[0]);cout << n << endl;
}int main()
{int a[] = { 6,-1,3,-4,-6,9,2,-2,5 };arr(a);
}
  1. 总结:其实就是:确定指向(pre->next = ),激活当前(pre = pre->next)
  2. 总代码:
 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* dummy = new ListNode(0);    记录一下头的位置ListNode* cur = dummy;                            弄个哨兵变量用于遍历while (l1 != nullptr && l2 != nullptr) {ListNode** pp = (l1->val < l2->val) ? &l1 : &l2;cur->next = *pp;cur = cur->next;*pp = (*pp)->next;}cur->next = (l1 == nullptr) ? l2 : l1;ListNode* ans = dummy->next;delete dummy;return ans;}

2. 删除排序链表中的重复元素

// 原来的代码有错误
ListNode* deleteDuplicates(ListNode* head) {   ListNode* new_head = new ListNode(head->val);ListNode* h = new_head;int temp = head->val;head = head->next;while (head != nullptr) {if (head->val != temp) {h->next = head;h = h->next;}temp = head->val;head = head->next;}return new_head;
}

修改了

ListNode* deleteDuplicates(ListNode* head) {if (!head) {return head;}ListNode* new_head = new ListNode(head->val);ListNode* h = new_head;int temp = head->val;head = head->next;while (head != nullptr) {if (head->val != temp) {h->next = head;h = h->next;temp = head->val;head = head->next;}else {temp = head->val;head = head->next;h->next = head; // 这句话一定要,他不是定义,他是修改!!!}}return new_head;
}

题目四、 删除链表的倒数第 N 个结点

开始的想法:

  1. 必须获得链表长度;(后面发现不一定)
  2. 循环到某个的时候跳过就好
    但是发现还少了一些
  3. 必须要用哑结点(头节点要一视同仁);

下面是我的代码,没用到哑结点,要不断排除特殊情况。

    ListNode* removeNthFromEnd(ListNode* head, int n) {int n1 = 0;ListNode* cur = head;while (cur != nullptr) {++n1;cur = cur->next;}if (n1 ==1) return head->next;  // 啰嗦了,但是必要的int k = 0;cur = head;if (k > n1 - n -1) return head->next;while (k < n1 - n -1) {++k;cur = cur->next;}cur->next = cur->next->next;return head;}

把上面的代码稍微修改,加入哑结点就好。

class Solution {
public:int getLength(ListNode* head) {int length = 0;while (head) {++length;head = head->next;}return length;}ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy = new ListNode(0, head);int length = getLength(head);ListNode* cur = dummy;for (int i = 1; i < length - n + 1; ++i) {cur = cur->next;}cur->next = cur->next->next;ListNode* ans = dummy->next;delete dummy;return ans;}
};作者:LeetCode-Solution
链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

当然,双指针发可以避免获取总长度

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy = new ListNode(0, head);ListNode* first = head;ListNode* second = dummy;for (int i = 0; i < n; ++i) {first = first->next;}while (first) {first = first->next;second = second->next;}second->next = second->next->next;ListNode* ans = dummy->next;delete dummy;return ans;}
};作者:LeetCode-Solution
链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

刷题 - 数据结构(二)链表

1. 链表 1.1 题目&#xff1a;合并两个有序链表 链表的建立与插入&#xff1a;关键在于留出头部&#xff0c;创建迭代指针。 ListNode* head new ListNode; // 通过new 创建了一个数据类型为ListNode的数据 并把该数据的地址赋值给ListNodeListNode* p 0; // 再创建一个数据…...

用于隔离PWM的光耦合器选择和使用

光耦合器&#xff08;或光隔离器&#xff09;是一种将电路电隔离的器件&#xff0c;不仅在隔离方面非常出色&#xff0c;而且允许您连接到具有不同接地层或在不同电压电平下工作的电路。光耦合器具有“故障安全”功能&#xff0c;因为如果受到高于最大额定值的电压&#xff0c;…...

面试完阿里,字节,腾讯的测试岗,复盘以及面试总结

前段时间由于某些原因辞职了&#xff0c;最近一直在面试。面试这段时间&#xff0c;经历过不同业务类型的公司&#xff08;电商、酒店出行、金融、新能源、银行&#xff09;&#xff0c;也遇到了很多不同类型的面试官。 参加完三家大厂的面试聊聊我对面试的一些看法&#xff0…...

分享一个外贸客户案例

春节期间一个外贸人收到了客户的回复&#xff0c;但因为自己的处理方式造成了一个又一个问题&#xff0c;我们可以从中学到一些技巧和知识。“上次意大利的客人询价后&#xff0c;一直没回复&#xff08;中间有打过电话&#xff0c;对方说口语不行&#xff0c;我写过邮件跟进过…...

【Kubernetes】第二篇 - 购买阿里云 ECS 实例

一&#xff0c;前言 上一篇&#xff0c;简单介绍了 CI/CD 的概念以及 ECS 服务规划&#xff0c;搭建整套服务需要三台服务器&#xff0c;配置如下&#xff1a; ECS 配置启动服务说明2核4GJenkins Nexus Dockerci-server2核4GDocker Kubernetesk8s-master1核1GDocker Kube…...

数影周报:据传国内45亿条快递数据泄露,聆心智能完成Pre-A轮融资

本周看点&#xff1a;据传国内45亿条快递数据泄露&#xff1b;消息称微软解雇150 名云服务销售&#xff1b;消息称TikTok计划在欧洲再开两个数据中心&#xff1b;衣服长时间放购物车被淘宝客服嘲讽&#xff1b;聆心智能完成Pre-A轮融资......数据安全那些事据传国内45亿条快递数…...

Leetcode力扣秋招刷题路-0073

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;mat…...

遥感数字图像处理

遥感数字图像处理 来源&#xff1a;慕课北京师范大学朱文泉老师的课程 遥感应用&#xff1a;遥感制图、信息提取 短期内了解知识结构–>有选择的剖析经典算法原理–>系统化知识结构、并尝试实践应用 跳出算法&#xff08;尤其是数学公式&#xff09; 关注原理及解决问…...

深度学习常用的python函数(一)

由于我只简单的学过python和pytorch&#xff0c;其中有很多函数的操作都还是一知半解的&#xff0c;其中有些函数经常见到&#xff0c;所以就打算记录下来。 1.zip zip(*a):针对单个可迭代对象压缩成n个元组&#xff0c;元组数量n等于min(a中元素的最小长度) a [(1, 2), (3…...

2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(一)

目录 前言 一、题目理解 背景 解析&#xff1a; 要求 二、建模 1.相关性分析 2.相关特征权重 只希望各位以后遇到建模比赛可以艾特认识一下我&#xff0c;我可以提供免费的思路和部分源码&#xff0c;以后的数模比赛只要我还有时间肯定会第一时间写出免费开源思路&…...

PPS文件如何转换成PPT?附两种方法

在工作中&#xff0c;PPS文件的使用还是很广泛的&#xff0c;因为作为幻灯片放映文件&#xff0c;点击后就能直接播放&#xff0c;十分方便。但如果想要修改PPS里的内容&#xff0c;PPS是无法编辑的&#xff0c;我们需要把文件转换成PPT&#xff0c;再进行修改。 那PPS文件如何…...

ParallelsDesktop安装【亲测可行】

我这边安装的是macos最新系统 (Ventura13.2) 本文参考这篇文章安装&#xff0c;但是你完全按照这篇文章会报错&#xff0c;具体可行操作记录如下 一、下载软件和补丁 1、点这里去下载补丁18.0.1 2、点这里去下载对应版本的ParallelsDesktop18.0.1&#xff0c;安装上到试用这里…...

在 Python 中只接受数字作为用户输入

只接受数字作为用户输入&#xff1a; 使用 while True 循环进行循环&#xff0c;直到用户输入一个数字。使用 float() 类尝试将值转换为浮点数。如果用户输入了一个数字&#xff0c;请使用 break 语句跳出循环。 while True:try:# &#x1f447;️ use int() instead of floa…...

【集合】JAVA基础篇(二)

目录一、java常用集合1、Java集合接口的作用2、Java集合常用实现类的作用二、Collection 常用的方法三、List 集合接口1、ArrayList类的常用方法2、LinkList类中的方法3、Vector4、ArrayList 类和 LinkedList 类的区别四、Set 集合1、HashSet 类2、TreeSet 类3、HashSet 和 Tre…...

机房意外掉电导致Elasticsearch的部分index无数据的修复过程

环境 :华为大数据集群FusionInsight V100R002C800SPC200、Elasticsearch 6.1.3、Kibana问题产生原因&#xff1a;因机房意外掉电导致集群部分机器两次掉电导致Elasticsearch重启&#xff0c;Elasticsearch重启后看似正常但某些index无数据。经排查判断为Elasticsearch的部分ind…...

Spring入门案例三:注解进行引用类型的自动装配

本系列文章将会带领大家进行Spring的全面学习&#xff0c;持续关注我&#xff0c;不断更新中… 一.案例分级 简单解析:配置类替代以前的配置文件&#xff0c;实体类提供对象&#xff0c;业务类中有实体类的引用对象&#xff0c;在业务层中实现引用类的自动装配。 二.各层代码…...

kubernet + kubevirt + ceph 汇总文档

目的 1 创建 kubenetes 集群 2 kubenetes 集群上部署 kubevirt 3 kubernetes 支持 ceph 存储 4 VMI 可以存储在 ceph rbd 存储中并正常使用 参考部署文档 名称连接备注centos8 + kubernetes 1.24 master/node 节点部署文档kubernetes 集群部署kubectl top node 使用方法部署文档…...

软件测试项目实战(附全套实战项目教程+视频+源码)

开通博客以来&#xff0c;我更新了很多实战项目&#xff0c;但一部分小伙伴在搭建环境时遇到了问题。 于是&#xff0c;我收集了一波高频问题&#xff0c;汇成本篇&#xff0c;供大家参考&#xff0c;避免重复踩坑。 如果你还遇到过其他坑和未解决的问题&#xff0c;可在评论区…...

Python seek()和tell()函数详解

在讲解 seek() 函数和 tell() 函数之前&#xff0c;首先来了解一下什么是文件指针。我们知道&#xff0c;使用 open() 函数打开文件并读取文件中的内容时&#xff0c;总是会从文件的第一个字符&#xff08;字节&#xff09;开始读起。那么&#xff0c;有没有办法可以自定指定读…...

数据库系统:1. 绪论

更好的阅读体验\huge{\color{red}{更好的阅读体验}}更好的阅读体验 文章目录1.1 数据库系统概述1.1.1 基本概念数据&#xff08;data&#xff09;数据库&#xff08;DataBase, DB&#xff09;数据库管理系统&#xff08;DataBase Management System, DBMS&#xff09;数据库系统…...

Android App开发基础

文章目录一 App的开发特点1.1 App的运行环境1.2 App开发语言1.3 java语言开发1.4 Kotlin语言开发1.5 XML1.6 App连接的数据库二 App的工程结构2.1 App工程目录结构2.2 构建工具Grade2.3 编译配置文件build.gradle2.4 运行配置文件AndroidManifest.xml2.4.1 application2.4.2 ac…...

力扣-分数排名

大家好&#xff0c;我是空空star&#xff0c;本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;178. 分数排名二、解题1.错误示范①提交SQL运行结果2.错误示范②提交SQL运行结果3.正确示范①提交SQL运行结果4.正确示范②提交SQL运行结果5.正确示范③提交…...

图文详解Ansible中的变量及加密

文章目录一、变量命名二、变量级别三、.变量设定和使用方式1.在playbook中直接定义变量2.在文件中定义变量3.使用变量4.设定主机变量和清单变量5.目录设定变量6.用命令覆盖变量7.使用数组设定变量8.注册变量9.事实变量10.魔法变量四、JINJA2模板五、 Ansible的加密控制练习1.用…...

silicon labs平台通过串口升级固件方案

开发环境 windowssimplicity studio 5geck sdk 4.1 一 bootloader 新建BGAPI UART DFU工程 工程新建完成以后看一下linkerfile.ld文件的flash和ram的配置跟自己的application工程是否对应得上 配置串口波特率和引脚 默认使用PB0进入bootloader模式&#xff0c;这里改成Non…...

MySQL 派生表产生关联索引auto_key0导致SQL非常的慢

相同的SQL在maridb运行0.5秒&#xff0c;在MySQL8.0.26中运行要19秒 官方MySQL在处理子查时&#xff0c;优化器有个优化参数derived_merge&#xff0c;MySQL7开启添加&#xff0c;默认on.很多情况可以自动优化派生表&#xff0c;避免创建临时索引auto_key0和生成临时表数据做…...

计算机网络期末复习汇总(附某高校期末真题试卷)

文章目录一、选择题二、填空题三、名词解析四、简答题五、高校期末真题一、选择题 1、传输延迟时间最小的交换方法是( A ) A.电路交换 B.报文交换 C.分组交换 D.信元交换 2、在OSI七层结构模型中&#xff0c;处于数据链路层与运输层之间的是&#xff08; B&#xff09; A、物…...

2月,还是不要跳槽

新年已经过去&#xff0c;马上就到金三银四跳槽季了&#xff0c;一些不满现状&#xff0c;被外界的“高薪”“好福利”吸引的人&#xff0c;一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必…...

科技爱好者周刊之爱好者记录

前言 平时浏览的内容杂七杂八&#xff0c;说好听一些叫做“内容丰富&#xff0c;涉猎甚广”&#xff0c;实际一些则是受到主流大环境的冲击加之自身的控制力尚且不足。 有过类似经历的人大多知道&#xff0c;碎片化的信息除了填充大脑的冗余空间&#xff0c;在短期时间内就会被…...

C++入门:函数重载

目录 一. 函数重载的概念和分类 1.1 什么是函数重载 1.2 函数重载的分类 1.3 关于函数重载的几点注意事项 二. C实现函数重载的底层逻辑&#xff08;为什么C可以实现函数重载而C语言不能&#xff09; 2.1 编译器编译程序的过程 2.2 为什么C可以实现函数重载而C语言不能 …...

每天10个前端小知识 【Day 16】

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…...

网站集群建设方案/上海网站seo诊断

上一篇简单的讲了下Handler的使用&#xff0c;本篇就解析一下Andorid消息处理机制的内部实现&#xff0c;到底是如何为绑定的线程创建looper对象和消息队列的&#xff0c;又是怎么实现消息添加、消息遍历和消息分发的。 首先需要介绍几个非常重要的角色&#xff1a;Looper、Han…...

做个小程序多少钱/企业网站如何优化

目录一、linux安装jdk二、linux安装tomcat三、linux安装idea2020四、linux安装mysql一、linux安装jdk 7.在 /etc/profile 文件中配置环境变量&#xff1a; 10.让环境变量 的文件生效&#xff1a; source /etc/profile 然后在控制台输出环境变量&#xff1a; echo $PATH 如下&…...

建设个商城网站需要多少钱/新型营销方式

Mybatis-Plus提供了多种方式进行多表查询&#xff0c;其中注解方式是其中的一种。以下是几个使用注解方式进行多表查询的例子&#xff1a; 1.一对一查询 假设我们有两张表&#xff1a;user表和address表&#xff0c;每个用户对应一个地址&#xff0c;这是一个典型的一对一关系…...

商城类网站和o2o网站/最近的新闻摘抄

题目大意 给出一个整数n(1<n<200)n (1 < n < 200)n(1<n<200)。 求出任意一个它的倍数m&#xff0c;要求m必须只由十进制的 0 或 1 组成。 思路分析 首先暴力枚举肯定是不可能的 1000ms 想不超时都难&#xff0c;而且枚举还要解决大数问题。 解题方法&am…...

杭州市上城区建设局网站/自媒体平台注册入口

我们日常开发的打包或者 SDK 的打包会生成一个ipa 或者 framework。在 framework 和 ipa 文件中其实都可以找到一个 exec 文件。这个文件就是一个 Mach-O 文件。这一次主要就是深入的去了解 Mach - O 文件在到底都用来做什么。 &#xff08;一&#xff09;了解 Mach - O 的结构…...

维护一个网站/seo怎么做优化计划

最近想对 API 做一些自动化测试&#xff0c;看了几个工具&#xff0c;最后选择了 postman&#xff0c;感觉 postman 的设计更好一些&#xff0c;我们可以在请求发送之前和请求获取到响应之后都可以自定义脚本&#xff0c;很灵活。而且 postman 的支持直接导入 swagger 定义&…...