链 表

3_1 删除链表中的节点

Answer-将被删节点下一个val复制到待删除节点,然后将待删节点直接连接到下下一个节点即可。

学到:

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     ListNode *next;

 *     ListNode(int x) : val(x), next(NULL) {}

 * };

 */

c++中结构体可以看作一个权限为public的类。其拥有成员变量、成员函数、构造函数等。

ListNode(int x) : val(x), next(NULL) {}就是构造函数的列表初始化操作。

3_2 删除链表的倒数第N个节点,给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

My-获取长度再跑到待删除节点前节点进行删除即可

Answer-快慢指针、栈

学到:初始化一个链表

结构体:

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) {}
};

初始链表并链上:

ListNode* head[5];
for (int i = 0; i < 6; i++)
{
    head[i] = new ListNode(i + 1);
}
for (int i = 0; i < 6; i++)
{
    head[i]->next = head[i + 1];
}
head[5]->next = nullptr;

注意:结构体声明再.h中只需要include  .h即可不用包含.cpp文件,不然会导致多重定义的符号的错误。

3_3 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

My-头插法

Answer-递归方法,1->2->3->4->5   

  1. 1->2->3->4<-5
  2. 1->2->3<-4<-5
  3. 1->2<-3<-4<-5
  4. 1<-2<-3<-4<-5

核心 head->next->next = head ;

注意:

ListNode* reverseList(ListNode* head) {

        ListNode* p = head;

        ListNode* result = new ListNode();

        result->next = nullptr;

        while(p != nullptr)

        {

            ListNode *q = p;

            p = p->next;

            q->next = result->next;

            result->next = q;

            

        }

        return result->next;

    }

 头插法时,一定让 p = p->next;紧跟ListNode *q = p;后,不然就找不到原本的顺序了。

3_4 合并两个有序链表

 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

My-双指针分别遍历若当前所遍历list1节点小于当前遍历list2节点,则当前list1插入合并链表,并且list1当前节点指针后移,反之list2指针加入合并链表并后移。若相等则都加入合并链表并后移。

Answer-递归,子问题划分,即list1与list2中较小的指向调用递归函数返回的结果,递归参数为(较小的节点的next和另一个链表中的节点)。

退出条件:

        if (list1 == NULL) {
            return list2;
        }
        if (list2 == NULL) {
            return list1;
        }

学习到:写法更加简易

r尾插p直接

r->next = p;

r = r->next;

即可

3_5 回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

My-借助栈先遍历入栈,再重新遍历并 逐个出栈比较,出现不相等即是非回文链表。

Answer-方法一:复制val到数组再进行前后向中间走进行双指针判断。

             方法二:递归,可以利用递归进行链表的方向遍历

void  print_node_val(ListNode *head)

{

     if(head != nullptr)

     { 

           print_node_val(head->next);

           cout << head->val << endl;

     }

}

currentNode 指针是先到尾节点,由于递归的特性再从后往前进行比较。frontPointer 是递归函数外的指针。若 currentNode.val != frontPointer.val 则返回 false。反之,frontPointer 向前移动并返回 true。

bool recursivelyCheck(ListNode* currentNode) {
        if (currentNode != nullptr) {
            if (!recursivelyCheck(currentNode->next)) {
                return false;
            }
            if (currentNode->val != frontPointer->val) {
                return false;
            }
            frontPointer = frontPointer->next;
        }
        return true;
    }
来源:力扣(LeetCode)

学到了:

C++栈的使用

//导入

include ”stack“

//初始栈

stack<int> mystack;

//入栈

mystack.push(val);

//出栈,返回为void

mystack.pop();

//获取栈顶元素

int a = mystack.top();

//栈空判断,空返回1非空为0

mystack.empty();

3_6判断链表是否有环

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

Answer-

方法一:快慢指针 两个指针一个走的快一个慢,若存在环则快指针一定会追上慢指针。

方法二:哈希表,注意哈希表存储节点。

核心:unordered_set<ListNode*> myset;

回顾:unorderd_set操作

定义unordered_set<datatype> set_name;

添加 myset.emplace(value);

查找myset.find(value); //返回为一个迭代器,auto类型 若未找到则返回myset.end() 否则返回一个正向迭代器。

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

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

相关文章

The most simple way to use Postman

Open Postman: Launch the Postman app.Create a Request: Click on the “New” button, then select “Request”. This creates a new tab for a request.Set Request Type to POST: On the new request tab, you’ll see a dropdown menu next to the URL field. Select “…

第十天:信息打点-APPamp;小程序篇amp;抓包封包amp;XP框架amp;反编译amp;资产提取

信息打点-APP&小程序 一、内在收集-代码 从app代码中去收集 1、移动端AppInfoScanner工具信息收集 安卓语法&#xff1a; python app.py android -i <Your apk file> 这个是从app代码中提取信息。 有些app会限制代理抓包&#xff0c;需要进行解壳。 类似CDN的…

【TypeScript】泛型

文章目录 1、介绍2、泛型函数- 定义泛型- 使用泛型 3、泛型接口3.1 约束对象形状&#xff1a;3.2 泛型接口作为函数类型3.3 泛型接口作为字典的类型3.4 泛型接口与多个类型参数 4、泛型类4.1 定义一个泛型类4.2 定义多个类型参数 5、泛型约束5.1 定义约束条件5.2 在泛型约束中使…

Vue中的组件通信方式及应用场景

在Vue中&#xff0c;组件通信有以下几种方式&#xff1a; Props / $emit&#xff1a;父组件通过给子组件传递props属性&#xff0c;子组件通过$emit事件将数据传递给父组件。适用于父组件向子组件传递数据。 自定义事件&#xff1a;父组件通过$on监听子组件触发的事件&#xf…

数据链路层(Data Link Layer)

数据链路层&#xff08;Data Link Layer&#xff09;是计算机网络体系结构中的一层&#xff0c;位于物理层和网络层之间。它的主要功能是在物理传输媒体上建立和管理数据链路。数据链路层的设计和实现对于网络通信的可靠性和效率至关重要。在本文中&#xff0c;我们将探讨数据链…

C#-接口

接口 (interface) 定义了一个可由类和结构实现的协定。接口可以包含方法、属性、事件和索引器。接口不提供它所定义的成员的实现 — 它仅指定实现该接口的类或结构必须提供的成员。 接口可支持多重继承。在下面的示例中&#xff0c;接口 IComboBox 同时从 ITextBox 和 IListBox…

IIS+SDK+VS2010+SP1+SQL server2012全套工具包及安装教程

前言 今天花了两个半小时安装这一整套配置&#xff0c;这个文章的目标是将安装时间缩短到1个小时 正文 安装步骤如下&#xff1a; VS2010 —> service pack 1 —>SQL server2012 —> IIS —> SDK 工具包链接如下&#xff1a; https://pan.baidu.com/s/1WQD-KfiUW…

[技术杂谈]使用VLC将视频转成一个可循环rtsp流

通过vlc播放器&#xff0c;将一个视频转成rtsp流&#xff0c;搭建一个rtsp服务器。rtsp客户端可访问这个视频的rtsp流。 1. 打开vlc播放器&#xff0c;使用的版本如下 2. 菜单&#xff1a;媒体 ---> 流 3. 添加视频文件&#xff0c;点击添加一个mp4 文件 4. 选择串流&…

如何安装和使用夜神模拟器连接Android Studio

目录 简介 一、安装 二、使用 三、更多资源 简介 夜神模拟器是一款在Windows平台上运行的Android模拟器软件。它能够模拟Android操作系统环境&#xff0c;让用户在电脑上轻松体验Android应用程序。夜神模拟器的功能强大&#xff0c;可以满足各种需求&#xff0c;无论是娱乐…

故障诊断 | 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型(matlab +python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 故障诊断 | 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型&#xff08;matlab python&#xff09; 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型 特征拼接 python&#xff08;pytorch&#xff09; 基于2D-…

可视化速通知识点

本文仅仅是我对可视化主要知识的一些记忆与思考&#xff0c;欢迎大家学习与批评指正。 首先&#xff0c;什么是可视化&#xff1f;可视化是利用计算机图形学和图像处理技术&#xff0c;将数据在屏幕上显示出来&#xff0c;并使用交互式处理的方法、理论和技术。 可视化的基本流…

大模型迎来“AppStore时刻”,OpenAI给2024的新想象

一夜之间&#xff0c;OpenAI公布了多个重磅消息&#xff0c;引发市场关注。 钛媒体App 1月5日消息&#xff0c;今晨&#xff0c;OpenAI公司向所有GPT开发者们发布一封邮件称&#xff0c;下周将上线自定义的“GPT Store”商店&#xff0c;这有望推动ChatGPT开发者生态不断完善。…

开源加解密库之GmSSL

一、简介 GmSSL是由北京大学自主开发的国产商用密码开源库&#xff0c;实现了对国密算法、标准和安全通信协议的全面功能覆盖&#xff0c;支持包括移动端在内的主流操作系统和处理器&#xff0c;支持密码钥匙、密码卡等典型国产密码硬件&#xff0c;提供功能丰富的命令行工具及…

多线程高级知识点

多线程高级知识点 1.ThreadLocal 1.1 什么是 ThreadLocal&#xff1f; ​ ThreadLocal 叫做本地线程变量&#xff0c;意思是说&#xff0c;ThreadLocal 中填充的的是当前线程的变量&#xff0c;该变量对其他线程而言是封闭且隔离的&#xff0c;ThreadLocal 为变量在每个线程…

服务器运维管理面板1Panel本地部署并结合内网穿透实现远程访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

EtherCAT主站SOEM -- 13 --Qt-Soem通过界面按键控制 EtherCAT IO模块的io输出

EtherCAT主站SOEM -- 13 --Qt-Soem通过界面按键控制 EtherCAT IO模块的io输出 一 mainwindow.c 文件函数:1.1 自定义PDO配置2.2 主站初始化2.3 去motrorcontrol界面二 motrorcontrol.c 文件三 allvalue.h 文件该文档修改记录:总结一 mainwindow.c 文件函数: mainwindow主界…

Docker学习与应用(四)-容器数据卷

1、容器数据卷 1&#xff09;什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像&#xff01; 数据&#xff1f;如果数据都在容器中&#xff0c;那么我们容器删除&#xff0c;数据就会丢失&#xff01;需求&#xff1a;数据可以持久化 MySQL&#xff0c;容器删…

MYSQL 存储过程/存储函数

简而言之&#xff0c;类似于封装函数 特点 基本语法 create peocedure p1() begin select coun(*) from studuent; end; call p1(); 设置完别忘了把delimiter改回来 变量 系统变量 用户自定义变量 set myname its; set myage : 10; 局部变量 if 参数&#xff08;IN&…

Oracle VM VirtualBox xx needs the Micrsoft Visual C++ 2019错误

错误展示 解决方法 重修安装 Visual C 文件 1、前往官网 C 中 Windows 编程概述 | Microsoft Learn 2、找到对应的包 左边导航栏依次选择&#xff1a; 部署本机桌面应用程序-----重新分发Visual C 文件-----最新受支持的Visual C可再发型程序包下载 根据自己电脑系统进行选…

linux mv command and authority managemet

mv abbreviation for move, as to move files and folders or change the folder name/ rename the specific folderLinux常见权限解释 -rw------- (600) 只有拥有者有读写权限。 -rw-r–r-- (644) 只有拥有者有读写权限&#xff1b;而属组用户和其他用户只有读权限。 -rwx--…