16.哀家要长脑子了!

2024-04-23 05:44
文章标签 16 要长 脑子 哀家

本文主要是介绍16.哀家要长脑子了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1. 707. 设计链表 - 力扣(LeetCode)

2.203. 移除链表元素 - 力扣(LeetCode)

3.206. 反转链表 - 力扣(LeetCode)

4.237. 删除链表中的节点 - 力扣(LeetCode)

5. 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)


1. 707. 设计链表 - 力扣(LeetCode)

这我都懂,但是,一让我动手写代码我就不会了TAT TAT TAT TAT TAT TAT

class MyLinkedList {int size;          //链表长度ListNode *head;    //头结点
public:MyLinkedList() {this->size = 0;                  //初始化链表无元素,长度为0this->head = new ListNode(0);    //头结点为空}int get(int index) {if(index < 0 || index >= size){    //访问位置不合理return -1;}ListNode *p = head;for(int i = 0; i <= index; i++){    p = p->next;}return p->val;}void addAtHead(int val) {addAtIndex(0,val);}void addAtTail(int val) {addAtIndex(size,val);}void addAtIndex(int index, int val) {if(index > size){    //插入位置大于链表长度,不合法return;}index = max(0,index);    size++;               // 插入元素,长度增加ListNode *p = head;for(int i = 0; i <index; i++){p = p->next;}ListNode *e = new ListNode(val);e->next = p->next;    //先为前驱p->next = e;          //再后继}void deleteAtIndex(int index) {if(index < 0 || index >= size){return ;}size--;    //删除元素 长度减小ListNode *pre = head;for(int i = 0; i <index; i++){pre = pre->next;    //定位到要删除元素的前一个元素}    ListNode *p = pre->next;pre->next = pre->next->next;    delete p;}
};/*** Your MyLinkedList object will be instantiated and called as such:* MyLinkedList* obj = new MyLinkedList();* int param_1 = obj->get(index);* obj->addAtHead(val);* obj->addAtTail(val);* obj->addAtIndex(index,val);* obj->deleteAtIndex(index);*/
2.203. 移除链表元素 - 力扣(LeetCode)

用一个空结点当头结点呀~~ 这样子如果需要删除的是头结点的话,就不需要进行额外操作了。

/*** 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* removeElements(ListNode* head, int val) {ListNode *first = new ListNode(0);    //是要生成新结点不是生成指针first->next = head;ListNode *p = first;   //工作指针p从头结点开始遍历while(p->next){if(p->next->val == val){    //p判断下一个位置的值p->next = p->next->next;}else{p=p->next;}}head = first->next;    delete first;return head;}
};
3.206. 反转链表 - 力扣(LeetCode)


晕头转向晕头转向



按顺序来是:蓝色、红色、粉色

/*** 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) {ListNode *prev = nullptr;ListNode *cur = head;    //用来指向当前反转方向的元素ListNode *next;          //用来指向下一个需要操作的元素while(cur){              //当前元素不为空,就需要反转  next = cur->next;    //先记录下一个需要反转的元素cur->next = prev;    //反转方向啦!不是指向后一个而是前一个prev = cur;      //因为要继续遍历 那么现在的元素对于下一个来说就是前驱元素cur = next;      //下一个元素来了  }return prev;}
};
4.237. 删除链表中的节点 - 力扣(LeetCode)


嗯。。。。看不太懂题,后面看题解发现,题目中给出这个哪个结点就删除哪个结点,不会给出整个链表,那你直接对这个结点操作就好。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:void deleteNode(ListNode* node) {node->val = node->next->val;    //记得要把值也给更改了node->next = node->next->next;}
};
5. 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

下次想到办法就先自己动手试试,不管会不会,先试试,再去看题解,像这个你自己的思路就是对的,要自信呀

单链表要删除结点,但是又不知道是正数第几个,没办法咯,只能先求出链表长度。

然后倒数第n个结点就是正数第length-n+1个结点。

/*** 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* removeNthFromEnd(ListNode* head, int n) {ListNode *p = head;int length = 0;while(p){++length;p = p->next;} ListNode *dummy = new ListNode(0, head);p = dummy;int m = length - n + 1;for(int i = 0; i < m-1; i++){p = p->next;}p->next = p->next->next;ListNode *ans = dummy->next;delete dummy;return ans;}
};

对于所要删除的结点的前驱结点的定位

for(int i = 1; i < m; i++) 或 for(int i = 0; i < m-1; i++)

加油! 

这篇关于16.哀家要长脑子了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927932

相关文章

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

【Qt6.3 基础教程 16】 掌握Qt中的时间和日期:QTimer和QDateTime的高效应用

文章目录 前言QTimer:定时任务的强大工具QTimer的基本用法高级特性:单次定时器 QDateTime:处理日期和时间获取当前日期和时间日期和时间的格式化输出日期和时间计算 用例:创建一个倒计时应用结论 前言 在开发桌面应用程序时,处理时间和日期是一个常见且重要的任务。Qt框架提供了强大的工具来处理与时间相关的功能,其中QTimer和QDateTime是最核心的类。本

Linux float int和16进制互相转换

Linux 上float int和16进制互换操作。之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是: //float 转 16进制float x_pid_p = 15.0;unsigned char * bValue = (unsigned char *)& x_pid_p;printf("%x\t%x\t%x\t%x\n", bValue[0], bVa

2021-02-16物料档案条码添加和蓝牙条码标签打印,金蝶安卓盘点机PDA,金蝶仓库条码管理WMS系统

物料档案条码添加和蓝牙条码标签打印,金蝶安卓盘点机PDA https://member.bilibili.com/platform/upload-manager/article 本期视频我们来讲解一下汉点机PDA条码添加和条码标签蓝牙便携打印: 在实际使用中,我们商品有两种情况: 一种是商品本身就有条码, 比如:超市卖的可口可乐,牛奶等商品,商品本身就有69开头的国标码,那么我们就可以使用盘点

[图解]建模相关的基础知识-16

1 00:00:00,350 --> 00:00:04,130 刚才那个,就相当于,12这个我们可以认为是什么 2 00:00:05,020 --> 00:00:11,360 我们用类图来表达就是,员工、电话 3 00:00:13,320 --> 00:00:15,080 多个 4 00:00:15,090 --> 00:00:16,440 当然这个电话这里 5 00:00:16,970

数据库阿里连接池 druid配置详解 标签: druidspringjavaxml配置阿里池 2016-06-16 00:34 57532人阅读 评论(11) 收藏 举报 版权声明:本文为博主原创文

数据库阿里连接池 druid配置详解 标签: druidspringjavaxml配置阿里池 2016-06-16 00:34  57532人阅读  评论(11)  收藏  举报 版权声明:本文为博主原创文章,未经博主允许不得转载。 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。数据库连接池有很多选择,c3p、dh

中文字符编码之GBK,UTF-16和UTF-8

编程中经常会遇到这三种字符编码形式的相互转换问题,以至于许多第三方的库不明原因的调用失败,其实很多都是由于第三方库支持的是utf-8而不是windows默认支持的utf-16导致的。 下面介绍一下windows系统下常见的这三种字符编码方式。 GB2312 是我们国家自己国标的汉字编码字符集,该字符集以一个16位的2进制数据单元表示一个汉字,所以能够将两个char型数据单元保存一个汉字。

Linux设备上的Onvif实现16:实现Onvif鉴权

2013-09-30 16:39:27 今天终于调试通过了鉴权过程,详细记录如下:1原理 在ONVIF_WG-APG-Application_Programmer's_Guide.pdf文档中第6章描述了onvif加密方式。Soap通信的验证机制是WS_UsernameToken,流加密的方式是HTTPS。本文只研究了WS_UsernameToken方式。       我们知道onvif

头歌资源库(16)分苹果

一、 问题描述  二、算法思想         首先,我们可以初始化一个数组apple来记录每个孩子分配的苹果数量,将所有元素初始化为1,表示每个孩子至少分配到一个苹果。        然后,从左到右遍历评分数组ratings,判断当前孩子的评分与前一个孩子的评分的大小关系。若当前孩子的评分大于前一个孩子的评分,则将当前孩子分配的苹果数量设为前一个孩子分配的苹果数量加1,保证相邻孩子

极客新闻——16、数据库设计中的5个常见错误

本文笔记全部来自《极客新闻》——新鲜的技术资讯、权威的趋势剖析、别样的技术洞察 本文作者总结了数据库设计中的5个常见错误,以供开发人员参考。 1、糟糕的预规划 好的数据库是深思熟虑的结果,而不是临时想法的集合。糟糕的设计规划会导致结构性问题,该数据库一旦退出后,要解决这些问题是相当昂贵的。我们不可能总是预测到数据库会遇到的所有问题,但是好的规划确保我们可以把问题减少到只有那些真正无法避免