LeetCode707.设计链表

2023-11-19

题目描述:707. 设计链表 - 力扣(LeetCode)

这道题用单向链表和双向链表都能写,因为对双向链表不是很熟,所以就用双向链表来写了。由于初始化的链表并没有放入任何元素,所以这个结点就当成哑结点来处理,而且这样对之后的增删操作也更便利。C语言代码如下:

typedef struct MyLinkedList {
    int val;
    struct MyLinkedList * pre;
    struct MyLinkedList * next;
} MyLinkedList;


MyLinkedList* myLinkedListCreate() {
    MyLinkedList * obj = (MyLinkedList *)calloc(1, sizeof(MyLinkedList));
    return obj;
}

int myLinkedListGet(MyLinkedList* obj, int index) {
    MyLinkedList * node = obj->next;
    int cnt = 0;
    while (node) {
        if (cnt == index) {
            return node->val;
        }
        node = node->next;
        cnt++;
    }
    return -1;
}

void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
    MyLinkedList * newhead = (MyLinkedList *)malloc(sizeof(MyLinkedList));
    newhead->val = val;
    newhead->next = obj->next;
    if (obj->next) {
        obj->next->pre = newhead;
    }
    obj->next = newhead;
    newhead->pre = obj;
}

void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
    MyLinkedList * node = obj;
    while (node->next) {
        node = node->next;
    }
    MyLinkedList * newtail = (MyLinkedList *)calloc(1, sizeof(MyLinkedList));
    newtail->val = val;
    newtail->pre = node;
    node->next = newtail;
}

void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
    MyLinkedList * addnode = (MyLinkedList *)calloc(1, sizeof(MyLinkedList));
    addnode->val = val;
    if (index <= 0) {
        addnode->next = obj->next;
        if (obj->next) {
            obj->next->pre = addnode;
        }
        obj->next = addnode;
        addnode->pre = obj;
        return;
    }
    int cnt = -1;
    MyLinkedList * node = obj;
    while (node->next) {
        if (cnt + 1 == index) {
            addnode->next = node->next;
            node->next->pre = addnode;
            node->next = addnode;
            addnode->pre = node;
            return;
        }
        cnt++;
        node = node->next;
    }
    if (cnt + 1 == index) {
        node->next = addnode;
        addnode->pre = node;
    } else {
        free(addnode);
    }
}

void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
    MyLinkedList * node = obj;
    int cnt = -1;
    while (node->next) {
        if (cnt + 1 == index) {
            node->next = node->next->next;
            if (node->next) {
                node->next->pre = node;
            }
            return;
        }
        cnt++;
        node = node->next;
    }
}

void myLinkedListFree(MyLinkedList* obj) {
    free(obj);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode707.设计链表 的相关文章

随机推荐

  • 轻松在Firefox中禁用JavaScript

    Want a quick and easy way to toggle JavaScript on and off in Firefox Then you will definitely want to take a good look a
  • 【Linux中高级运维:云计算】第1章:云计算简介+kvm虚拟机安装+日常操作和管理+快照管理

    1 什么是云计算 云计算是一种按量付费的模式 云计算的底层是通过虚拟化技术来实现的 2 云计算的服务类型 2 1IAAS 基础设施即服务 虚拟机 ecs openstack 2 2PAAS 平台即服务 php java docker容器 2
  • 浏览器主页被篡改360篡改浏览器主页,官方四步最完美解决办法

    以前写过一篇浏览器主页被360篡改成他们的主页的文章 那时真的就是气的直接卸载了360 之后通过修改注册表的方式 将主页修改回来 方法很暴力 由于重做了系统 360又被重新安装了回来 结果和以往一样 我的主页还是被强制修改了 但是这次我冷静
  • 3.1-并发控制:互斥

    复习 状态机 状态机 状态机 本次课回答的问题 Q 如何在多处理器上实现线程互斥 本次课主要内容 自旋锁的实现 互斥锁的实现 一 共享内存上的互斥 在共享内存上实现互斥 失败的尝试 mutex bad py 部分 成功的尝试 peterso
  • 3dmax 保存慢 卡死

    解决3DMAX保存慢的方法 方法一 在MAX环境中 按F11会弹出一个编辑框 然后输入 t trackviewnodes n t Max MotionClip Manager deleteTrackViewController t n co
  • 基于tensorflow2.0+使用bert获取中文词、句向量并进行相似度分析

    本文基于transformers库 调用bert模型 对中文 英文的稠密向量进行探究 开始之前还是要说下废话 主要是想吐槽下 为啥写这个东西呢 因为我找了很多文章要么不是不清晰 要么就是基于pytorch 所以特地写了这篇基于tensorf
  • 请求后端返回的验证码显示的情况

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 情况一 数据是图片文件流 二 情况二 直接返回是图片 情况三 uni小程序的登录验证 最后 前言 在实际的项目中验证码登录几乎是每个开发人员的必备操作技能
  • [工具环境] pip&git lfs下载命令

    关键词 pip git lfs pip从git下载指定的提交版本 伴随着大模型的火热发展 PEFT和transformers也是更新频繁 常会看到requirements中安装的软件包来自github中的某个commit hash 比如re
  • 应用编排与管理:核心原理

    本节课程要点 K8s 资源的重要元信息 使用阿里云服务演示一下如何去修改或查看 K8s 重要元数据 详细分析控制器模式 总结控制器模式特点 资源元信息 1 Kubernetes 资源对象 首先 我们来回顾一下 Kubernetes 的资源对
  • g2o的基本使用

    参考 https www jianshu com p e16ffb5b265d 参考 https zhuanlan zhihu com p 36889150 图是一种数据结构 在图优化中 用顶点 vertex 表示优化变量 用边 edge
  • Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】

    最近一周在研究rom移植 所以就对Smali语言学习了一下 Smali语言其实就是Davlik的寄存器语言 Smali语言就是android的应用程序 apk通过apktool反编译出来的都有一个smali文件夹 里面都是以 smali结尾
  • 基于当前系统制作docker镜像

    1 通过tar 备份目录 tar cvpf home buildrpm tar directory exclude proc exclude sys exclude dev exclude run root localhost home l
  • 不能安装64位office提示已安装32位的

    问题描述 安装64位office办公软件的时候提示已经安装32位的office办公软件所以无法继续安装 但实际上之前安装的32位的office办公软件已经卸载了 问题现象截图如下 解决办法 从问题描述中 我们其实已经能够看出问题原因了 类似
  • React的超详细讲解

    React React的重点 webpack webpack 是一个现代 JavaScript 应用程序的静态模块打包器 module bundler 当 webpack 处理应用程序时 它会递归地构建一个依赖关系图 dependency
  • 虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(一)

    UPCGBlueprintElement是PCGGraph中自定义节点的基类 但官方目前还没有给出详细的文档 所以从源代码里找点答案 文章目录 可覆盖函数 Override Functions Excute 和 Excute with Co
  • web.xml加载顺序

    web xml加载顺序 应用服务器启动时web xml加载过程 至于这些节点在xml文件中的前后顺序没有关系 不过有些应用服务器 我曾碰到过的 websphere就严格要求web xml的节点顺序 否则部署不成功 所以还是赞成按照web x
  • CSS 样式穿透

    1 穿透语法 如果给样式中声明scop 那么页面的类会增加data 562e3wue8等属性 此时就需要用到 gt gt gt 或者 deep 或者 v deep 以后用后两个比较多 如果在样式类前面 v deep 则会自动找到 data
  • 快速搭建一个自己的服务器详解(java环境)

    一 服务器的购买 1 我选择的是阿里云的服务器 学生价9 5元一个月 百度直接搜索阿里云 然后点击右上角登录 推荐大家用支付宝扫码登录 方便快捷 阿里云官网的东西比较多 登录后我找了很久也没有找到学生服务器在哪里卖 最后在咨询里找到了这个网
  • 喜爱夜蒲3_百度百科

    喜爱夜蒲3 百度百科 喜爱夜蒲3
  • LeetCode707.设计链表

    题目描述 707 设计链表 力扣 LeetCode 这道题用单向链表和双向链表都能写 因为对双向链表不是很熟 所以就用双向链表来写了 由于初始化的链表并没有放入任何元素 所以这个结点就当成哑结点来处理 而且这样对之后的增删操作也更便利 C语