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

代码随想录day3

203:移除链表元素:注意虚拟头节点的使用

ListNode* removeElements(ListNode* head, int val) {
        ListNode* result = new ListNode();
        result->next = head;
        ListNode* current = result;
        while(current != nullptr && current->next != nullptr){
            if(current->next->val == val){
                ListNode* tmp = current->next;
                current->next = tmp->next;
                delete tmp;
            }else{
                current = current->next;
            }
        }
        return result->next;
    }

707.设计链表:依然采用虚拟头节点方式

todo:学习双指针写法

class MyLinkedList {
    
public:
    struct LinkedNode {
        int val;
        LinkedNode* next;
        LinkedNode(int val):val(val),next(nullptr){}

    };
    MyLinkedList() {
        prev = new LinkedNode(0);
        _size = 0;
    }
    
    int get(int index) {
        if(index < 0 || index >= _size){
            return -1;
        }
        LinkedNode* current = prev->next;//注意此处起始位置
        while(index--){
            current = current->next;
        }
        return current->val;
    }
    
    void addAtHead(int val) {
        LinkedNode* current = new LinkedNode(val);
        LinkedNode* tmp = prev->next;
        current->next = tmp;
        prev->next = current;
        _size++;
    }
    
    void addAtTail(int val) {
        LinkedNode* current = prev;
        while(current->next != nullptr){
            current = current->next;
        }
        LinkedNode* tail = new LinkedNode(val);
        current->next = tail;
        _size++;
    }
    
    void addAtIndex(int index, int val) {
        if(index > _size){
            return;
        }
        if(index < 0) index = 0;
        
        LinkedNode* current = prev;
        while(index--){
            current = current->next;
        }
        LinkedNode* node = new LinkedNode(val);
        node->next = current->next;
        current->next = node;
        _size++;
    }
    
    void deleteAtIndex(int index) {
        if(index < 0 || index > _size-1){
            return;
        }
        LinkedNode* current = prev;
        while(index--){
            current = current->next;
        }
        LinkedNode* tmp = current->next;
        current->next = tmp->next;
        delete tmp;
        _size--;
    }
private:
    int _size;
    LinkedNode* prev;
};

206.反转链表:学习使用双链表法

ListNode* reverseList(ListNode* head) {
        ListNode* cur = head;
        ListNode* pre = nullptr;
        ListNode* tmp = head;
        while(cur){
            tmp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = tmp;
        }
        return pre;
    }


http://www.kler.cn/a/517858.html

相关文章:

  • 国产编辑器EverEdit - 输出窗口
  • Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)
  • 单片机-STM32 WIFI模块--ESP8266 (十二)
  • ansible自动化运维实战--软件包管理模块、服务模块、文件模块和收集模块setup(4)
  • 华为数据之道-读书笔记
  • Linux之Tcp粘包笔记
  • 速通Docker === Docker 镜像分层存储机制
  • 消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)
  • C语言自定义数据类型详解(一)——结构体类型(上)
  • GPU算力平台|在GPU算力平台部署百川大模型(Baichuan2)的应用教程
  • ABB CC-Link IE FB协议与WTW Modbus TCP协议汽车涂装生产线的精准协作方案改造
  • ambari-2.8源码编译
  • 双北斗ntp网络时钟服务器、双北斗网络时钟同步系统、双北斗ntp协议时钟服务器
  • Adobe的AI生成3D数字人框架:从自拍到生动的3D化身
  • 复习动态规划入门
  • 龙蜥社区加入智算产业联盟,助力构建开放、包容、普惠的 AI 新生态
  • 【含开题报告+文档+PPT+源码】基于java web的篮球馆管理系统系统的设计与实现
  • 计算机网络 (58)无线局域网WLAN
  • 综合能源规划仿真软件
  • 【负载均衡式在线OJ】加载题目信息(文件版)
  • WinDBG查找C++句柄泄露
  • 剑指Offer|LCR 044.在每个树行中找最大值
  • 【爬虫开发】爬虫开发从0到1全知识教程第12篇:scrapy爬虫框架,介绍【附代码文档】
  • mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看当前数据库是那个,删除数据库,使用数据库;查看当前数据库有哪些表
  • 小南每日 AI 资讯 | 2025年AI泡沫破裂? | 25/01/24
  • uart iic spi三种总线的用法