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;
};
相关推荐
碧波bibo9 分钟前
【算法突破】【C++】 第一篇 数组
c++·算法
45288655上山打老虎30 分钟前
【智能指针】
开发语言·c++·算法
稚辉君.MCA_P8_Java34 分钟前
Gemini永久会员 go数组中最大异或值
数据结构·后端·算法·golang·哈希算法
会员果汁44 分钟前
双向链式队列-C语言
c语言·数据结构
Michelle80231 小时前
机器学习实战操作手册
人工智能·算法·机器学习
HaiLang_IT1 小时前
【目标检测】基于卷积神经网络的轨道部件(扣件、轨枕、钢轨)缺陷检测算法研究
算法·目标检测·cnn
草莓熊Lotso1 小时前
《算法闯关指南:优选算法--前缀和》--31.连续数组,32.矩阵区域和
c++·线性代数·算法·矩阵
csuzhucong1 小时前
斜转魔方、斜转扭曲魔方
前端·c++·算法
C语言不精1 小时前
c语言-优雅的多级菜单设计与实现
c语言·开发语言·算法
AI科技星2 小时前
张祥前统一场论:引力场与磁矢势的关联,反引力场生成及拉格朗日点解析(网友问题解答)
开发语言·数据结构·经验分享·线性代数·算法