LeetCode707:设计链表

题目描述

实现 MyLinkedList 类:

MyLinkedList() 初始化 MyLinkedList 对象。

int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。

void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。

void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。

void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。

void deleteAtIndex(int index) 如果下标有效,则删除链表中下标为 index 的节点。

示例

代码

cpp 复制代码
class MyLinkedList {
public:
    struct ListNode{
        int val;
        ListNode* next;
        ListNode(int val) :val(val), next(nullptr) {}
    };
    MyLinkedList() {
        this->size = 0;
        this->dummyHead = new ListNode(0);

    }

    int get(int index) {
        if (index<0 || index>size - 1)
            return -1;
        
        ListNode* cur = dummyHead->next;
        while (index--)
            cur = cur->next;
        return cur->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;
        ListNode* newNode = new ListNode(val);

        ListNode* cur = dummyHead;
        while (index--)
            cur = cur->next;

        newNode->next = cur->next;
        cur->next = newNode;
        size++;
    }

    void deleteAtIndex(int index) {
        if (index<0 || index>size-1) return;
        ListNode* cur = dummyHead;
        while (index--)
            cur = cur->next;
        
        ListNode* tmp = cur->next;
        cur->next = cur->next->next;
        delete tmp;
        tmp=nullptr;
        size--;
    }
private:
    int size;
    ListNode* dummyHead;
};
相关推荐
residual_fan4 分钟前
航空发动机故障诊断专用智能体(三):基于对比学习的时序特征区分方法
人工智能·算法·数据挖掘·数据分析
Logic10110 分钟前
C语言/数据结构位运算题解:异或XOR找出数据表中的“独特编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
高亦真22 分钟前
今天是学习嵌入式的第39天
linux·学习·算法
Omics Pro1 小时前
AI药物研发10原则!欧盟EMA×美国FDA
数据库·人工智能·算法·机器学习·自然语言处理
wabs6661 小时前
关于二叉树【力扣100.相同的树的思考】
数据结构·c++·算法·leetcode·二叉树·递归法
知知之之1 小时前
敏感数据查询:SHA-256 还是 HMAC-SHA256
算法
彧azz1 小时前
Java学习记录:判断语句
java·笔记·学习·算法
alphaTao1 小时前
LeetCode 每日一题 2026/9/14-2026/9/20
算法·leetcode
hanlin032 小时前
刷题笔记:力扣第560题-和为k的子数组
笔记·算法·leetcode