当前位置: 首页 > news >正文

代码随想录算法训练营day3(链表)

华子目录

  • 移除链表元素
    • 思路
  • 设计链表
    • 思路
  • 翻转链表
    • 思路

移除链表元素

  • https://leetcode.cn/problems/remove-linked-list-elements/

在这里插入图片描述

思路

  • 问题:如果我们删除的元素除头结点的其他元素,我们只需要将被删除元素的上一个节点next指向被删除元素的下一个节点,但是如果删除的元素头结点的话,我们就需要将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]:
        virtualHead = ListNode()    # 申请虚拟节点
        virtualHead.next = head    # 虚拟节点指向head
        cur = virtualHead           
        while cur.next:
            if cur.next.val == val:   
                cur.next = cur.next.next    # 删除节点
            else:
                cur = cur.next
        return virtualHead.next 

设计链表

  • https://leetcode.cn/problems/design-linked-list/

在这里插入图片描述

  • get(index):获取链表中下标为index的值。
  • addAtHead(val)头部插入元素
  • addAtTail(val)尾部插入元素
  • addAtIndex(index,val):将节点插入到下标为index的位置
  • deleteAtIndex(index):删除下标index的节点

思路

  • 采用虚拟头结点
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class MyLinkedList:
    def __init__(self):
        self.virtualHead = ListNode()
        self.size = 0

    def get(self, index: int) -> int:
        if index <0 or index > self.size -1:
            return -1
        cur = self.virtualHead.next
        for _ in range(index):
            cur = cur.next
        return cur.val

    def addAtHead(self, val: int) -> None:
        tempNode = ListNode(val)
        tempNode.next = self.virtualHead.next
        self.virtualHead.next = tempNode
        self.size +=1

    def addAtTail(self, val: int) -> None:
        tempNode = ListNode(val)
        cur = self.virtualHead    # 注意:没有节点时,尾部插入也可以是头部插入
        while cur.next:
            cur = cur.next
        cur.next = tempNode
        self.size +=1

    def addAtIndex(self, index: int, val: int) -> None:
        if index < 0 or index > self.size:   # 注意:最后一个节点的位置的下一个节点插入也是可以的
            return None
        tempNode = ListNode(val)
        cur = self.virtualHead       # 有可能在头结点的位置插入
        for _ in range(index):
            cur = cur.next
        tempNode.next = cur.next
        cur.next = tempNode
        self.size +=1

        
    def deleteAtIndex(self, index: int) -> None:
        if index <0 or index > self.size -1:
            return None
        cur = self.virtualHead    # 有可能删除头结点
        for _ in range(index):
            cur = cur.next
        cur.next = cur.next.next
        self.size -= 1
        


# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

翻转链表

  • https://leetcode.cn/problems/reverse-linked-list/

在这里插入图片描述

思路

  • 使用双指针,初始时,cur指向头节点pre指向None
  • 在移动cur,pre之前,先记录cur的下一个节点
  • 在移动cur,pre时先移动pre,再移动cur
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur = head
        pre = None
        while cur:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre
http://www.dtcms.com/a/130445.html

相关文章:

  • 流与分组的共生关系
  • vue + uniapp 实现仿百度地图/高德地图/美团/支付宝 滑动面板 纯css 实现
  • Matlab个性化绘图第10期—滑珠进度柱状图
  • 富文本编辑器的内容导出html,并保留图片
  • 【第41节】windows的中断与异常及异常处理方式
  • 【第四十周】文献阅读:用于检索-增强大语言模型的查询与重写
  • 精品整理 | 云安全知识证书 (CCSK) v5 备考学习资源汇总
  • Reinforcement Learning-Autonomous car-useful
  • 【数学建模】(智能优化算法)粒子群优化算法(PSO)详解与Python实现
  • 【STM32】STemWin库,使用template API
  • vs2022 pcl1.15.0注意点
  • 实现当文本内容过长时,中间显示省略号...,两端正常展示
  • K8S+Prometheus+Consul+alertWebhook实现全链路服务自动发现与监控、告警配置实战
  • GitHub 趋势日报 (2025年04月12日)
  • 【C++】继承:万字总结
  • 《2025四大AI终极对决:如何用ChatGPT、DeepSeek、通义千问和文心一言提升项目管理效率?》
  • STM32 HAL库SPI读写W25Q128(软件模拟+硬件spi)
  • Python基础总结(四)之元组
  • 计算机视觉6——相机基础
  • (自用)毕业论文格式
  • 文件操作和 IO - 一些具体的使用栗子
  • 动手学深度学习:手语视频在VGG模型中的测试
  • 测试 笔记
  • 【计网】网络交换技术之报文交换(复习自用,了解,重要3)
  • 0x06.Redis 中常见的数据类型有哪些?
  • FutureTask 源码解析
  • 深入剖析 Axios 的 POST 请求:何时使用 qs 处理数据
  • 0基础 | 硬件滤波 C、RC、LC、π型
  • 基于Springboot+Mysql的闲一品(含LW+PPT+源码+系统演示视频+安装说明)
  • [16届蓝桥杯 2025 c++省 B] 水质检测