考研生活day2--王道课后习题2.3.1、2.3.2、2.3.3

2.3.1

题目描述:

这题和曾经做过的LeetCode203.移除元素一模一样,所以我们就使用LeetCode进行书写,题目链接203. 移除链表元素 - 力扣(LeetCode)

解题思路

·大家的第一反应肯定是根据书上所学的书写方法一样书写,但是书上有一种情况没有说明,那就是如果要删除的节点是头节点该如何处理,这里我们就要考虑到头结点是如何处理的

·处理头节点可以直接对链表操作,也可以使用其他方法处理,在这里我提供一个方法,就是使用虚拟头结点对头结点操作,也就是在链表头结点前定义一个虚拟头结点,这样就可以把头结点当作普通节点进行处理了

·大家可能不明白我我说的意思,可以直接看代码,就可以理解了

代码如下:

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummyHead = new ListNode(0);//定义一个虚拟节点值为0
        dummyHead->next = head;//虚拟头结点指向链表头结点
        ListNode* cur = dummyHead;//定义临时节点用于遍历链表
        while(cur->next != NULL){
            if(cur->next->val == val){//书上的删除节点操作
                ListNode* tmp = cur->next;
                cur->next = cur->next->next;
                delete tmp;
            }else{
                cur = cur->next;
            }
        }
        head = dummyHead->next;
        delete dummyHead;//删除虚拟头结点
        return head;
    }
};

2.3.2

题目描述

解题思路

1.我们在链表的操作中,一定要记下被操作元素的前驱结点,而后继节点可以很轻易的得到

2.这道题和上一题没有什么本质上的区别,我们只需要再定义一个minn变量,用于记录下当前最小节点的前驱即可

3.所以我们只需要不断的比较cur->next就可以了

4.再用一个临时节点temp用于记录cur->next即可

代码如下:

#include <iostream>
using namespace std;

typedef struct LNode
{
    int data;
    struct LNode* next;
} LNode, * LinkList;

// 头插法
void HeadInsert(LinkList& L)
{
    int val = 0;
    while (cin >> val)
    {
        LNode* s = new LNode;
        s->data = val;
        s->next = L->next;
        L->next = s;

        if (cin.get() == '\n')
        {
            break;
        }
    }
}

// 尾插法
void TailInsert(LinkList& L)
{
    int val = 0;
    LNode* r = L;
    while (cin >> val)
    {
        LNode* s = new LNode;
        s->data = val;
        r->next = s;
        r = s;
        r->next = NULL;

        if (cin.get() == '\n')
        {
            break;
        }
    }
}

// 遍历输出链表元素
void Print(LinkList L)
{
    LNode* p = L->next;
    while (p)
    {
        cout << p->data << '\t';
        p = p->next;
    }
    cout << endl;
}


void DelMinValue(LinkList& L) {
    LNode* p, * pre;
    p = L->next, pre = L;

    LNode* minp, * minpre;
    minp = p; minpre = pre;

    while (p) {
        if (p->data < minp->data) {
            minpre = pre;
            minp = p;
        }
        pre = p;
        p = p->next;
    }
    minpre->next = minp->next;
    delete minp;
}


int main()
{
    LinkList L = new LNode;
    TailInsert(L);

    DelMinValue(L);
    Print(L);
}

运行结果


2.3.3

这道题也与LeetCode206.反转链表一致,继续使用LeetCode进行学习206. 反转链表 - 力扣(LeetCode)

解题思路

1.可以重新定义一个链表,将第一个链表中的元素取出后,再放入新建的链表中,即可实现,这个方法同样也可以借助栈进行求解

2.可以考虑使用双指针法,不理解双指针法的同学可以不考虑使用这个方法

代码如下

双指针法

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* temp;//保存cur的下一个节点
        ListNode* cur = head;
        ListNode* pre = NULL;
        while(cur){
            temp = cur->next;// 保存一下,cur的下一个节点,因为要改变cur->next
            cur->next = pre;//进行翻转操作
            //更新pre和cur指针
            pre = cur;
            cur = temp;
        }
        return pre;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么这几年参加PMP考试的人越来越多

参加PMP认证的人越来越多的原因我认为和社会发展、职场竞争、个人提升等等方面有着不小的关系。国际认证与国内认证的性质、发展途径会有一些区别&#xff0c;PMP引进到中国二十余年&#xff0c;报考人数持增长状态也是正常的。 具体可以从下面这几个点来展开论述。 市场竞争…

【技术追踪】SegGuidedDiff:基于分割引导扩散模型实现解剖学可控的医学图像生成(MICCAI-2024)

它来了它来了&#xff0c;它带着 mask 做生成了~ SegGuidedDiff&#xff1a;提出一种用于解剖学可控医学图像生成的扩散模型&#xff0c;在每个采样步骤都遵循多类解剖分割掩码并结合了随机掩码消融训练算法&#xff0c;可助力乳房 MRI 和 腹部/颈部到骨盆 CT 等任务涨点。 论文…

python中的包和模块

目录 一、包与模块 二、第三方包的安装 2.1 pip install 2.2使用 curl 管道 2.3其他安装方法 三、导入单元的构成 3.1pip的使用 四、模块的缓存 一、包与模块 Python 中除了函数库以外&#xff0c;还有非常多且优秀的第三方库、包、模块。 模块Module&#xff1a;以…

LangChain 开发智能Agent,你学会了吗?

Prompt Enginnering 是打开LLM宝库的一把金钥匙&#xff0c;如果prompt得法&#xff0c;并能将其技巧与某项工作深度结合&#xff0c;那必将大大增效。今天我们来聊聊如何优化Prompt设计、Prompt Template管理等技术和体力活&#xff0c;并赋能老喻干货店的营销活动。 LLM Pro…

基于机器学习的零售商品销售数据预测系统

1 项目介绍 1.1 研究目的和意义 在电子商务日益繁荣的今天&#xff0c;精准预测商品销售数据成为商家提升运营效率、优化库存管理以及制定营销策略的关键。为此&#xff0c;开发了一个基于深度学习的商品销售数据预测系统&#xff0c;该系统利用Python编程语言与Django框架&a…

Java服务器代码远程调试(IDEA版)

Java服务器代码远程调试 配置启动脚本参数配置IDEA远程调试工具操作步骤 注意&#xff1a;远程调试的代码需要与本地代码一致&#xff0c;远程调试目的是解决本地环境无法支持调试的情况下&#xff0c;解决线上&#xff08;测试&#xff09;环境调试问题。 配置启动脚本参数 n…

昇思25天学习打卡营第10天|linchenfengxue

基于MobileNetv2的垃圾分类 通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 MobileNetv2模型原理介绍 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#x…

TikTok直播限流与网络的关系及解决方法

TikTok作为一款热门的社交平台&#xff0c;其直播功能吸引了大量用户。然而&#xff0c;一些用户可能会遇到TikTok直播限流的问题&#xff0c;例如直播过程中出现播放量低、直播画面质量差等情况。那么&#xff0c;TikTok直播限流与所使用的网络线路是否有关系&#xff1f;是否…

TypeScript Project References npm 包构建小实践

npm 包输出 es/cjs 产物 在开发一个 npm 包时&#xff0c;通常需要同时输出 ES 模块和 CommonJS 模块的产物供不同的构建进行使用。在只使用tsc进行产物编译的情况下&#xff0c;我们通常可以通过配置两个独立的 tsconfig.json 配置文件&#xff0c;并在一个 npm script 中 执…

typescript学习回顾(五)

今天来分享一下ts的泛型&#xff0c;最后来做一个练习 泛型 有时候&#xff0c;我们在书写某些函数的时候&#xff0c;会丢失一些类型信息&#xff0c;比如我下面有一个例子&#xff0c;我想提取一个数组的某个索引之前的所有数据 function getArraySomeData(newArr, n:numb…

Mouse Prealbumin ELISA Kit小鼠前白蛋白ELISA试剂盒

前白蛋白&#xff08;PRE&#xff09;是一种由4条相同的多肽链组成的四聚体蛋白。电泳时&#xff0c;它比血清白蛋白的迁移速度更快&#xff0c;PRE可以作为多种疾病患者营养评价的标志物。ICL的Mouse Prealbumin ELISA Kit应用双抗体夹心法测定小鼠样本中前白蛋白水平&#xf…

CentOS7源码安装nginx并编写服务脚本

华子目录 准备下载nginx源码包关闭防火墙关闭selinux安装依赖环境 解压编译安装测试编写服务脚本&#xff0c;通过systemctl实现服务启动与关闭测试 准备 下载nginx源码包 在源码安装前&#xff0c;我们得先下载nginx源码包https://nginx.org/download/这里我下载的是nginx-1…

《梦醒蝶飞:释放Excel函数与公式的力量》8.2 COUNTA函数

8.2 COUNTA函数 COUNTA函数是Excel中用于统计指定区域内所有非空单元格数量的函数。它能够统计数值、文本、错误值以及公式返回的结果&#xff0c;是数据分析中常用的统计工具。 8.2.1 函数简介 COUNTA函数用于统计指定区域中所有非空单元格的数量。它与COUNT函数不同&#…

transformer——多变量预测PyTorch搭建Transformer实现多变量多步长时间序列预测(负荷预测)——transformer多变量预测

写在最前&#xff1a; 在系统地学习了Transformer结构后&#xff0c;尝试使用Transformer模型对DNA序列数据实现二分类&#xff0c;好久前就完成了这个实验&#xff0c;一直拖着没有整理&#xff0c;今天系统的记录一下&#xff0c;顺便记录一下自己踩过的坑 &#xff08;需要…

OpenHarmony开发实战:GPIO控制器接口

功能简介 GPIO&#xff08;General-purpose input/output&#xff09;即通用型输入输出。通常&#xff0c;GPIO控制器通过分组的方式管理所有GPIO管脚&#xff0c;每组GPIO有一个或多个寄存器与之关联&#xff0c;通过读写寄存器完成对GPIO管脚的操作。 GPIO接口定义了操作GP…

Echarts 问题集锦

最近公司集中做统计图表&#xff0c;新手小白&#xff0c;真被Echarts折腾地不轻&#xff0c;怕自己年老记忆衰退&#xff0c;特地做一些记录。以备后面查阅。 1、X轴的 数据显示不全&#xff0c;间或不显示 很奇葩&#xff0c;我发现数据里有一个值为0.0&#xff0c;当这条记…

液压件工厂的MES解决方案:智能生产,高效未来

一、引言 虽然我国液压件行业发展迅速&#xff0c;但是大多数液压件生产企业规模小、自主创新能力不足&#xff0c;大部分液压产品处于价值链中低端。且由于技术、工艺、设备及管理等多方面的限制&#xff0c;高端液压件产品研发生产水平不足&#xff0c;无法形成有效的供给&a…

【linux】虚拟机安装 BCLinux-R8-U4-Server-x86_64

目录 一、概述 1.1移动云Linux系统订阅服务 CLS 1.2 大云天元操作系统BC-Linux 二、安装 一、概述 1.1移动云Linux系统订阅服务 CLS 移动云Linux系统订阅服务 CLS &#xff08;Cloud Linux Service&#xff09;为使用BC-Linux操作系统的用户提供标准维保服务以及高级技术支…

生物墨水的重要特性

生物打印技术正以前所未有的速度发展&#xff0c;为组织工程和再生医学领域带来了革命性的变革。然而&#xff0c;成功打印出功能性的三维结构&#xff0c;并将其应用于人体&#xff0c;离不开生物墨水这一关键材料。主要特性包括&#xff1a; 物理性质 表面张力: 表面张力影…

基于java+springboot+vue实现的社团管理系统(文末源码+Lw)270

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#…