代码随想录算法训练营第3天 | 203.移除链表元素 ,707.设计链表 , 206.反转链表

数组理论基础

文章链接:https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

203.移除链表元素

题目链接:https://leetcode.cn/problems/remove-linked-list-elements/
这种情况下的移除操作,就是让节点next指针直接指向下下一个节点就可以了,
但是要注意删除头结点的情况。

思路1:使用虚拟头结点

设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除了。

class Solution {public ListNode removeElements(ListNode head, int val) {// 方法1:添加虚拟结点ListNode dummy = new ListNode(0,head);ListNode pre = dummy;while(pre.next != null){if(pre.next.val == val){pre.next = pre.next.next;}else {pre = pre.next;}}return dummy.next;}
}

思路2:不使用虚拟头结点

class Solution {public ListNode removeElements(ListNode head, int val) {// 方法2:不添加虚拟头结点// 要特殊判断while(head!=null && head.val==val) head = head.next;// 此时可能是空节点,如果不加判断的话,后面cur.next就可能报错if(head==null)  return head;ListNode cur = head;while(cur.next!=null){if(cur.next.val==val){cur.next = cur.next.next;}else{cur = cur.next;}}return head;}
}

时间复杂度 O(n)

707.设计链表

题目连接:https://leetcode.cn/problems/design-linked-list/

链表操作的两种方式:

  1. 直接使用原来的链表来进行操作。
  2. 设置一个虚拟头结点在进行操作。

解法:使用虚拟头结点(这样会方便一点)

class ListNode {int val;ListNode next;ListNode(){}ListNode(int val){this.val = val;}ListNode(int val,ListNode next){this.val = val;this.next = next;}
}class MyLinkedList {int size;ListNode head;public MyLinkedList() {this.size = 0;// 虚拟头节点head = new ListNode(0);}public int get(int index) {if(index<0 || index>=size)return -1;ListNode cur = head.next;for(int i=0;i<index;i++){cur = cur.next;}return cur.val;}public void addAtHead(int val) {//    addAtIndex(0,val);ListNode cur = head;ListNode newNode = new ListNode(val);newNode.next = cur.next;cur.next = newNode;size++;}public void addAtTail(int val) {// addAtIndex(size,val);ListNode cur = head;ListNode newNode = new ListNode(val);for(int i=0;i<size;i++)cur = cur.next;newNode.next = cur.next;cur.next = newNode;size++;}public void addAtIndex(int index, int val) {if(index > size || index <0)return;// 定位到插入的结点ListNode cur = head;for(int i = 0;i<index;i++){cur = cur.next;}ListNode newNode = new ListNode(val);newNode.next = cur.next;cur.next = newNode;size++;}public void deleteAtIndex(int index) {if(index >= size || index <0)return;// 定位到删除的结点ListNode cur = head;for(int i = 0;i<index;i++){cur = cur.next;}cur.next = cur.next.next;size--;}
}/*** 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);*/

时间复杂度O(n)

206.反转链表

题目连接:https://leetcode.cn/problems/reverse-linked-list/

解法:改变指针的指向

如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。

其实只需要改变链表的next指针的指向,直接将链表反转 ,而不用重新定义一个新的链表,如图所示:
在这里插入图片描述

之前链表的头节点是元素1, 反转之后头结点就是元素5 ,这里并没有添加或者删除节点,仅仅是改变next指针的方向。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {ListNode cur = head;ListNode pre=null, tmp=null;while(cur!=null){tmp = cur.next;       // 2cur.next = pre;      // 1 -> null   pre = cur;          // pre = 1cur = tmp;}return  pre;}
}

时间复杂度:O(n)
空间复杂度:O(1)

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

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

相关文章

【Docker】数据管理之数据卷的挂载

一、什么是数据卷 为了很好的实现数据保存和数据共享&#xff0c;Docker提出了Volume这个概念&#xff0c;简单的说就是绕过默认的联合 文件系统&#xff0c;而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。数据卷提供了一些有用的特性&#xff1a; 数据卷可以在…

虚幻UE 材质-材质图层、材质图层混合

学习材质图层和材质图层混合的使用&#xff0c;便于节点扫盲。 文章目录 前言一、材质图层混合二、使用步骤总结 前言 材质混合我们之前用Bridge的插件进行混合过 而此次我们的材质混合使用UE自带的材质图层和材质图层混合来实现 一、材质图层混合 材质图层混合是一种允许将…

俩万字详解C++STL期末复习知识点(C++STL课本源码私信可得)

邸老师复习建议 复习注意事项 1 不考死记硬背的题&#xff0c;比如名词解释。 2 选择题重点考核宏观性、综合性的问题&#xff0c;比如&#xff1a;把电话通讯录存入容器&#xff0c;该选哪一个容器&#xff1f; 3 选择题重点考核理解性的问题&#xff0c;比如&#xff0c;…

04. BI - LightGBM vs CatBoost,具体实现分析

本文专辑&#xff1a; 茶桁的 AI 秘籍 - BI 篇 文章目录 LightGBMLightGBM的使用CatBoostCatBoost 的使用 Hi&#xff0c;你好。我是茶桁。 那今天我们是来讲解另外两个Boosting的工具&#xff0c;首先是微软出品的LightGBM。 LightGBM LightGBM 是微软提出来的, 是属于XGBoo…

工业智能网关:HiWoo Box远程采集设备数据

工业智能网关&#xff1a;HiWoo Box远程采集设备数据 在工业4.0和智能制造的浪潮下&#xff0c;工业互联网已成为推动产业升级、提升生产效率的关键。而在这其中&#xff0c;工业智能网关扮演着至关重要的角色。今天&#xff0c;我们就来深入探讨一下工业智能网关。 一、什么…

P5736 【深基7.例2】质数筛题解

题目 输入n个不大于105的正整数。要求全部储存在数组中&#xff0c;去除掉不是质数的数字&#xff0c;依次输出剩余的质数。 输入输出格式 输入格式 第一行输入一个正整数n&#xff0c;表示整数个数。 第二行输入n个正整数&#xff0c;以空格隔开。 输出格式 输出一行&a…

Jenkins基础篇--添加节点

节点介绍 Jenkins 拥有分布式构建(在 Jenkins 的配置中叫做节点)&#xff0c;分布式构建能够让同一套代码在不同的环境(如&#xff1a;Windows 和 Linux 系统)中编译、测试等。 Jenkins 运行的主机在逻辑上是 master 节点&#xff0c;下图是主节点和从节点的关系。 添加节点 …

AMEYA360:广和通RedCap模组FG131FG132系列

2024年1月&#xff0c;广和通RedCap模组FG131&FG132系列已进入工程送样阶段&#xff0c;可为终端客户提供样片。广和通RedCap模组系列满足不同终端对5G速率、功耗、尺寸、成本的需求&#xff0c;全面助力RedCap技术的行业应用。 FG131&FG132系列基于骁龙X35 5G调制解调…

C#~Winform取消窗体最大化最小化按钮

目录 取消最大化-false取消最小化-false效果 取消最大化-false 取消最小化-false 效果

对比学习2024最新SOTA&应用方案分享,附14篇必读论文和代码

同学们发现没有&#xff0c;对比学习在我们的日常工作生活中已经很常见了&#xff0c;比如推荐系统任务&#xff0c;为用户推荐相似的商品或预测用户的购买行为&#xff1b;又比如图像检索&#xff0c;为用户找相似图片或识别不同物体。另外还有语音识别、人脸识别、NLP&#x…

AI智能分析网关V4烟火检测算法解决方案

一、背景需求 根据国家消防救援局公布的数据显示&#xff0c;2023年共接报处置各类警情213.8万起&#xff0c;督促整改风险隐患397万处。火灾危害巨大&#xff0c;必须引起重视。传统靠人工报警的方法存在人员管理难、场地数量多且分散等问题&#xff0c;无法有效发现险情降低…

数据结构初阶之插入排序与希尔排序详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力,共赴大厂。 目录 一.前言 二.插入排序 …