[代码随想录打卡 Day3] 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

news2024/11/5 17:21:21

(ง •_•)ง今天出去玩了,只刷完了视频,做了部分题,就是具体整理明天整理。希望坚持下去。啊啊啊啊啊啊啊啊啊啊啊

链表理论基础

在这里插入图片描述
基础的就是单链表。
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。
一般程序让你得到一个链表,就是返回他的头指针
看代码比较直观。

public class ListNode {
    // 结点的值
    int val;

    // 下一个结点
    ListNode next;

    // 节点的构造函数(无参)
    public ListNode() {
    }

    // 节点的构造函数(有一个参数)
    public ListNode(int val) {
        this.val = val;
    }

    // 节点的构造函数(有两个参数)
    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
class ListNode:
    def __init__(self, val, next=None):
        self.val = val
        self.next = next

203.移除链表元素

分两步,找到+删除。用cur.next的值判断是否是需要删除的节点,如果不是就cur = cur.next遍历到下一个节点。如果是,就cur = cur.next.next删除,C++需要手动释放内存。
这里面有个问题是如果头指针是需要删除的节点怎么办,正常就是判断分两种情况。太麻烦。我们就引入虚拟头节点,让虚拟头节点的next指针指向head头节点,这样头节点和中间节点的处理方式就统一了。返回的时候,只要返回虚拟头节点的next即可。

/**
 * 方法1
 * 时间复杂度 O(n)
 * 空间复杂度 O(1)
 * @param head
 * @param val
 * @return
 */
public ListNode removeElements(ListNode head, int val) {
    while(head!=null && head.val==val) {
        head = head.next;
    }
    ListNode curr = head;
    while(curr!=null && curr.next !=null) {
        if(curr.next.val == val){
            curr.next = curr.next.next;
        } else {
            curr = curr.next;
        }
    }
    return head;
}

/**
 * 方法1
 * 时间复杂度 O(n)
 * 空间复杂度 O(1)
 * @param head
 * @param val
 * @return
 */
public ListNode removeElements(ListNode head, int val) {
    while (head != null && head.val == val) {
        head = head.next;
    }
    // 已经为null,提前退出
    if (head == null) {
        return head;
    }
    // 已确定当前head.val != val
    ListNode pre = head;
    ListNode cur = head.next;
    while (cur != null) {
        if (cur.val == val) {
            pre.next = cur.next;
        } else {
            pre = cur;
        }
        cur = cur.next;
    }
    return head;
}

(版本一)虚拟头节点法
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        # 创建虚拟头部节点以简化删除过程
        dummy_head = ListNode(next = head)
        
        # 遍历列表并删除值为val的节点
        current = dummy_head
        while current.next:
            if current.next.val == val:
                current.next = current.next.next
            else:
                current = current.next
        
        return dummy_head.next

707.设计链表

206.反转链表(看视频讲解,顶呱呱)

参考的题目、文章、视频

  1. https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E9%93%BE%E8%A1%A8%E7%9A%84%E7%B1%BB%E5%9E%8B
  2. https://leetcode.cn/problems/remove-linked-list-elements/description/
  3. https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html
  4. https://www.bilibili.com/video/BV18B4y1s7R9/?vd_source=145b0308ef7fee4449f12e1adb7b9de2
  5. https://leetcode.cn/problems/design-linked-list/description/
  6. https://programmercarl.com/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
  7. https://www.bilibili.com/video/BV1FU4y1X7WD/?vd_source=145b0308ef7fee4449f12e1adb7b9de2
  8. https://leetcode.cn/problems/reverse-linked-list/description/
  9. https://programmercarl.com/0206.%E7%BF%BB%E8%BD%AC%E9%93%BE%E8%A1%A8.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
  10. https://www.bilibili.com/video/BV1nB4y1i7eL/?vd_source=145b0308ef7fee4449f12e1adb7b9de2

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

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

相关文章

OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测

OpenCV基本操作(python开发)——(1) 读取图像、保存图像 OpenCV基本操作(python开发)——(2)图像色彩操作 OpenCV基本操作(python开发)——(3&…

LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务

论文标题:How to Specialize Large Vision-Language Models to Data-Scarce VQA Tasks? Self-Train on Unlabeled Images! 作者:Zaid Khan, Vijay Kumar BG, Samuel Schulter, Xiang Yu, Yun Fu, Manmohan Chandraker 期刊:CVPR 2023 DOI…

产品思维笔记(一):打造用户喜爱的产品by Marty Cagan

全文摘要 《启示录:打造用户喜爱的产品》是由美国著名产品经理Marty Cagan所著,他曾经是eBay最出色的产品经理之一,也是Google X实验室的创始人之一。在这本书中,他分享了自己的经验和教训,帮助读者更好地理解如何打造…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中,TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别,以通俗易懂的方式进行解释: 1. 模型层数 OSI 模型:有 7 层&#…

Unity humanoid 模型头发动画失效问题

在上一篇【Unity实战笔记】第二十二 提到humanoid 模型会使原先的头发动画失效,如下图所示: 头发摆动的是generic模型和动画,不动的是humanoid模型和动画 一开始我是尝试过在模型Optimize Game objects手动添加缺失的头发骨骼的,奈…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

Redis缓存在thinkPHP/fastAdmin框架中的应用

Redis缓存在thinkPHP/fastAdmin框架中的应用 引言 在现代Web开发中,性能优化是一个永恒的话题。随着用户数量的增加和业务逻辑的复杂化,如何提高应用的响应速度和处理能力成为了开发者们必须面对的挑战。缓存技术作为提升性能的有效手段之一&#xff0…

Rust 力扣 - 189. 轮转数组

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们观察数组的性质,可以通过翻转原数组,然后在翻转前k个元素,最后翻转k个之后的元素,最终就转换成了原数组的轮转数组 题解代码 impl Solution {pub fn rotate(…

Kubernetes中的cm存储

华子目录 1.configmap1.1configmap功能1.2configmap应用场景1.3configmap的使用场景1.4configmap创建方式1.4.1键值对创建1.4.2通过文件创建1.4.3通过目录创建1.4.4通过yaml文件创建 1.5configmap的应用示例1.5.1使用cm填充环境变量1.5.2通过数据卷使用configmap1.5.3利用confi…

tauri开发中如果取消了默认的菜单项,复制黏贴撤销等功能也就没有了,解决办法

取消默认的菜单项:清除tauri默认的菜单项,让顶部的菜单menu不显示-CSDN博客 就是通过配置空菜单,让菜单不显示,但是这个引发的问题就是复制黏贴撤销等功能也就没有了,解决办法: 新增加编辑下的子菜单&…

【SpringCloud详细教程】-01-一文了解微服务

精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

Redis数据结构:List类型全面解析

文章目录 一、List数据类型1.1 简介1.2 应用场景1.3 底层结构 二、数据结构2.1 压缩列表ZipList2.2 双向链表LinkedList(后续已废弃)2.3 快速链表QuickList 三、List常见命令 一、List数据类型 1.1 简介 详细介绍:Redis五种数据类型、Strin…

kafka相关面试题

文章目录 什么是消息中间件?kafka 是什么?有什么作用?kafka 的架构是怎么样的?Kafka Replicas是怎么管理的?如何确定当前能读到哪一条消息?生产者发送消息有哪些模式?发送消息的分区策略有哪些&…

异步回调之Join

join:异步阻塞之闷葫芦 阻塞模式实现泡茶实例首先从基础的多线程join合并实验入手.join操作的原理是阻塞当前线程,直到待合并的目标线程执行完成. 线程的合并流程 Java中线程的合并流程是:假设线程A调用线程B的join()方法去合并B线程,那么线程A进入阻塞状态,直到线程B执行完…

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件,它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用,并探讨其在各种应用中不断扩展…

“揭开Ajax:实现无缝客户端与服务器通信的秘密”

一、概述 (一)概念: 1.概念: Ajax是一种web应用技术,可以借助客户端脚本与服务器端应用进行异步通讯,获取服务器数据以后,进行局部刷新进而提高数据响应和渲染速度。 2.开发基础&#xff1a…

自定义日志打成jar包引入项目后不生效

背景:写了一个请求响应日志包,打包后在另一个项目使用pom引入后不生效 package com.example.qqllog.aspect;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean;…

Java基于微信小程序的美食推荐系统(附源码,文档)

博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解

文章目录 1. 标题标签2. 段落标签3. 文本格式化标签4. 列表标签4.1 无序列表 `<ul>`4.2 有序列表 `<ol>`5. 引用标签5.1 块引用 `<blockquote>`5.2 行内引用 `<q>`5.3 作品引用 `<cite>`6. 代码和预格式文本标签6.1 代码标签 `<code>`6.2 …

一文读懂曲线调色原理

文章目录 1. 光学三原色2. 印刷三原色3. 互补关系4. 颜色混合结果5. 如何应用6. 总结 1. 光学三原色 红、绿、蓝三个颜色组成光学三原色&#xff0c;当他们三个颜色等量混合的时候就会变成白色&#xff0c;而白色代表亮&#xff0c;所以也称为加色模式。 2. 印刷三原色 青、品、…