LeetCode707 设计链表

前言

题目: 707. 设计链表
文档: 代码随想录------设计链表
编程语言: C++
解题状态: 代码功底不够,只能写个大概

思路

主要考察对链表结构的熟悉程度,对链表的增删改查,比较考验代码功底以及对链表的掌握。本题中的一些边界条件也要注意。

代码

cpp 复制代码
class MyLinkedList {
public:
    struct ListNode {
        int val;
        ListNode* next;
        ListNode(int x) : val(x), next(nullptr) {}
    };

    MyLinkedList() {
        _dummyHead = new ListNode(0);
        _size = 0;
    }
    
    int get(int index) {
        if (index > (_size - 1) || index < 0) {
            return -1;
        }

        ListNode* cur = _dummyHead -> next;

        while (index--) {
            cur = cur -> next;
        }

        return cur -> val;
    }
    
    void addAtHead(int val) {
        ListNode* newNode = new ListNode(val);

        newNode -> next = _dummyHead -> next;
        _dummyHead -> next = newNode;

        _size++;
    }
    
    void addAtTail(int val) {
        ListNode* newNode = new ListNode(val);
        ListNode* cur = _dummyHead;

        while (cur -> next != nullptr) {
            cur = cur -> next;
        }
        cur -> next = newNode;

        _size++;
    }
    
    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 >= _size || index < 0) {
            return;
        }

        ListNode* cur = _dummyHead;
        while (index--) {
            cur = cur -> next;
        }
        ListNode* tmp = cur -> next;
        cur -> next = cur -> next -> next;
        delete tmp;

        _size--;
    }

    void printLinkedList() {
        ListNode* cur = _dummyHead;
        while (cur -> next != nullptr) {
            cout << cur -> next -> val << " ";
            cur = cur -> next;
        }
        cout << endl;
    }

private:
    int _size;
    ListNode* _dummyHead;
};
相关推荐
小飞学编程...6 小时前
【哈希表】
数据结构·哈希算法·散列表
码匠许师傅6 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
重生之后端学习8 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
动词ing9 小时前
【C语言】结构体+文件基础
c语言·开发语言·数据结构
夜不会漫长10 小时前
C++入门(1)
开发语言·c++·算法
晚风醉蝶12 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
旖旎夜光12 小时前
LeetCode 852:山脉数组的峰顶索引(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
..Dauntless..12 小时前
【C++】继承——基类和派生类的配合
开发语言·c++·算法
程与留12 小时前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
buhuizhiyuci13 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化