单向链表题库2(c++)

devtools/2024/11/14 8:31:06/

目录

  • 前言
  • [1.力扣——LCR 123. 图书整理 I](https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/description/)
  • [2.力扣——LCR 024. 反转链表](https://leetcode.cn/problems/UHnkqh/submissions/580256040/)
  • [3.力扣LCR 141. 训练计划 III](https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/description/)
  • [4.力扣——2487. 从链表中移除节点](https://leetcode.cn/problems/remove-nodes-from-linked-list/)
  • [5.力扣——2816. 翻倍以链表形式表示的数字](https://leetcode.cn/problems/double-a-number-represented-as-a-linked-list/description/)
  • 结语

前言

接着上一个作品的题库,没学单向链表的先看我这个作品(蓝色字体点进去),再看题库1巩固知识,然后再看这个题库。

在这里插入图片描述

1.力扣——LCR 123. 图书整理 I

(蓝色字体点进去看原题)

代码题解

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:vector<int> reverseBookList(ListNode* head) {//这一题就是反转链表,也就是逆序输出链表vector<int> ans;//定义一个顺序表用于返回逆序输出的值while(head){ans.push_back(head->val);head=head->next;}int l=0,r=ans.size()-1;//一定要注意顺序表是从下标0开始的所以最后一个下标是长度减一while(l<r){//逆序输出就相当于对称换值int t=ans[l];ans[l]=ans[r];ans[r]=t;l++,r--;//l往后跑,r往前跑}return ans;}
};

2.力扣——LCR 024. 反转链表

代码题解

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverseList(ListNode* head) {if(!head||!head->next)return head;//递归出口,如果链表头结点为空或者只有一个节点就返回headListNode*newHead=reverseList(head->next);//newHead用于每层反转链表之后的新头节点head->next->next=head;//反转链表以后head就不是头结点了是尾结点head->next看做newHead,newhead->next为headhead->next=NULL;//因为head为尾结点所以head->next为空return newHead;}
};

3.力扣LCR 141. 训练计划 III

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* trainningPlan(ListNode* head) {if(!head||!head->next) return head;ListNode*newHead=trainningPlan(head->next);head->next->next=head;head->next=NULL;return newHead;}
};

4.力扣——2487. 从链表中移除节点

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNodes(ListNode* head) {if(!head)return NULL;//递归出口head->next=removeNodes(head->next);//假定进行递归的时候得到一个单调不增的链表,返回这个链表的头结点if(head->next==NULL)return head;//然后让head与head->next(单调不增的链表头结点)比较如果head大返回head,反之返回head->next也就是移除了headif(head->val<head->next->val)return head->next;return head;}
};

5.力扣——2816. 翻倍以链表形式表示的数字

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {void doDouble(ListNode*head,int* cap){//cap代表进位的值if(!head){//递归出口head为空也就是链表到尾部了*cap=0;//最后一位的进位肯定为0return ;}int val;doDouble(head->next,&val);*cap=(2*head->val+val)/10;//记录当前节点的进位        head->val=(2*head->val+val)%10;//记录当前节点翻倍后的值}
public:ListNode* doubleIt(ListNode* head) {int val;doDouble(head,&val);return val == 0 ? head : (new ListNode(val,head));//如果val为0也就是说最高位没有进位也就不用生成新的节点,否则生成新的节点保留进位的值返回即可}
};

结语

看完这几题,如果你还想刷更多有关单向链表的题,就去力扣题库分类查看数据结构单向链表的题,那么单向链表就告一段落了,下一个作品我会讲初级数据结构——栈。

在这里插入图片描述

想看更多内容可以关注我,看我作品,关注我让我们一起学习编程,希望大家能点赞关注支持一下,让我有持续更新的动力,谢谢大家
在这里插入图片描述


http://www.ppmy.cn/devtools/133871.html

相关文章

B2002 Hello,World! C++实现

Hello,World! 题目描述 编写一个能够输出 Hello,World! 的程序。 提示&#xff1a; 使用英文标点符号&#xff1b;Hello,World! 逗号后面没有空格。H 和 W 为大写字母。 输入格式 输出格式 样例 #1 样例输入 #1 无样例输出 #1 Hello,World!#include <bits/stdc.h&…

sql数据库-聚合函数-DQL(类似Excel函数)

目录 聚合函数介绍 语法 举例 统计表中的所有女性员工 统计表中工作地点在北京的员工 聚合函数介绍 常用的聚合函数 函数功能count统计字段数量max最大值min最小值avg平均值sum求和 语法 SELECT 聚合函数(字段列表) FROM 表名; 举例 统计表中的所有女性员工 sele…

git版本工具使用教程

git版本工具使用教程 1. 安装 GitWindowsmacOSLinux 2. 配置 Git全局配置 3. 基本命令初始化仓库克隆仓库添加文件到暂存区提交变更查看状态查看提交历史切换分支创建新分支合并分支推送变更到远程仓库拉取远程仓库的最新变更查看差异撤销修改撤销提交 4. 进阶操作标签&#xf…

什么是量化交易

课程大纲 内容初级初识量化&#xff0c;理解量化 初识量化 传统量化和AI量化的区别 量化思想挖掘 量化思想的挖掘及积累技巧 量化代码基础&#xff1a; python、pandas、SQL基础语法 金融数据分析 常用金融分析方式 常用因子分析方式 数据分析实战练习 回测及交易引擎 交易引擎…

苹果低价版Vision Pro 推迟至2027年发布:XR领域的变局与挑战

苹果宣布其低价版Vision Pro头显将推迟至2027年发布,这一消息在XR(扩展现实)社区引发了广泛讨论。作为一名长期关注XR领域的KOL兼投资人,我对这一决定有着深刻的思考和见解。 一、苹果的独特优势 苹果在XR领域拥有得天独厚的优势,这使其成为少数几家有能力启动通用型XR生…

【缓存策略】你知道 Cache Aside(缓存旁路)这个缓存策略吗

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…

易语言加载dll模拟windows鼠标轨迹移动

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 语言中&#xff0c;path/filepath 包提供了一组用于处理文件路径的函数&am…