代码编织梦想

前言

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

思路

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

代码

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;
};
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/daishabby2486/article/details/140682659

Java实现 LeetCode 707 设计链表(环形链表)-爱代码爱编程

707. 设计链表 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。 在链表类中实现这些功能: g

day3:leetcode203移除链表元素,leetcode707设计链表,leetcode206反转链表_hessian_matrix的博客-爱代码爱编程

今日鸡汤:“今天不想跑,所以才去跑,这才是长距离跑者的思维方式。”–村上春树 写在前面:就个人而言,链表的题目最好画一下草图,不要凭空想!!! 希望自己多看一下教材,不要把基础的东西忘了。 - 移除链表元素Leetcod

代码随想录算法训练营第3天|leetcode203移除链表元素、 leetcode206 反转链表、 leetcode707设计链表-爱代码爱编程

题目 Leetcode203移除链表元素Leetcode206 反转链表Leetcode707设计链表 Leetcode203移除链表元素 点击跳转 题目: 代码: /** * Definition

代码随想录算法训练营第三天| 链表理论基础、leetcode 203移除链表元素、leetcode 707 设计链表、leetcode 206 反转链表-爱代码爱编程

1 链表理论基础  文章讲解:代码随想录(programmercarl.com) 2 LeetCode 203移除链表元素 题目链接:LeetCode 203 移除链表元素 文章讲解:代码随想录(programmercarl.com) 视频讲解:手把手带你学会操作链表 | LeetCode:203.移除链表元素 2.1

代码随想录算法训练营第三天 | 链表理论基础 、leetcode 203 移除链表元素、leetcode 707 设计链表、leetcode 206 反转链表-爱代码爱编程

目录 链表理论基础 Leetcode 203 移除链表元素 Leetcode 707 设计链表 Leetcode 206 反转链表 链表理论基础 文章链接:代码随想录_链表理论基础 定义:链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向

c语言(7.23)-爱代码爱编程

今天学习了冒泡排序,选择排序 冒泡排序 #include <stdio.h> int main() { //1.定义数组 int arr[] = { 3,5,2,1,4 }; int len = sizeof(arr) / sizeof(int); //2.先分开写每次循环,找到规律后再合并 for (int i = 0; i

数据结构:逻辑结构与物理结构-爱代码爱编程

逻辑结构与物理结构 逻辑结构1. 集合结构2. 线性结构3. 树形结构4. 图形结构 物理结构1. 顺序存储结构2. 链式存储结构 示例逻辑结构的示例:线性表物理结构的示例 结论 逻

代码随想录算法训练营第三天 | leetcode203移除链表元素, leetcode707设计链表, leetcode206反转链表-爱代码爱编程

LeetCode203移除链表元素 代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * Li

代码随想录算法训练day3|leetcode 203移除链表元素、leetcode 707设计链表、leetcode 206 反转链表-爱代码爱编程

A.移除链表元素 数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。 链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。 链表的操作 删除节点

【算法与数据结构】并查集-爱代码爱编程

并查集 合并和查询集合的数据结构,经常用于连通图,最小生成树 K r

linux嵌入式学习——数据结构——线性表的链式结构-爱代码爱编程

线性表的链式存储     解决顺序存储的缺点,插入和删除,动态存储问题。 特点:     线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存储在任意内存未被占用的位置上。          所以前面的顺序表只需要存储数据元素信息就可以了。在链式结构中还需要一个元素存储下一个元素的地址。     

手撕数据结构02-爱代码爱编程

一、理论基础 二分搜索,也称折半搜索、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。 二分搜索是一种高效的查找算法,适用于在已排序的数组中查找特定元素。它的基本思想是通过不断将搜索区间对半分割,从而快速缩小查找范围。 二分搜索每次把搜索区域减少一半,时间复杂度为 O(logn)(n代表集合中元素的个数)。 二分搜索的基本步骤如下: 1.