LeetCode 707.设计链表


思路

链表结点设置一个虚拟头结点,方便后续对链表的操作

代码实现

class MyLinkedList {public:
struct ListNode{int val;ListNode *next;ListNode(int x) : val(x), next(nullptr) {}
};MyLinkedList() {size = 0;dummyHead = new ListNode(0);}int get(int index) {if(index > (size - 1) || index < 0){return -1;}ListNode * cur = dummyHead->next;while(index--)      // 注意:--index会报错{cur = cur->next;}return cur->val;}void addAtHead(int val) {ListNode *cur = dummyHead;ListNode *newNode = new ListNode(val);newNode->next = cur->next;cur->next = newNode;size++;}void addAtTail(int val) {ListNode *newNode = new ListNode(val);ListNode *cur = dummyHead;while(cur->next != nullptr){cur = cur->next;}newNode->next = cur->next;cur->next = newNode;size++;}void addAtIndex(int index, int val) {if(index > size || index < 0){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--;}private:int size;ListNode *dummyHead;
};

注意

  • 1)需要区分NULL和nullptr:

    • NULL属于 C 语言中的宏,后来 C++11 引入了 nullptr 关键字,都用来表示空指针。

    • 在C语言中,NULL是一个宏,被定义为空指针

      #define NULL ((void *)0)
      

      所以说NULL实际上是一个空指针,如果在C语言中写入以下代码,编译是没有问题的,因为在C语言中把空指针赋给int和char指针的时候,发生了隐式类型转换,把void指针转换成了相应类型的指针。

      int  *pi = NULL;
      char *pc = NULL;
      

      以上代码如果使用C++编译器来编译则是会出错的,因为C++是强类型语言,void*是不能隐式转换成其他类型的指针的,所以实际上编译器提供的头文件做了相应的处理

    • 在C++11中,NULL实际上是0,而nullptr表示空指针

      #ifdef __cplusplus
      #define NULL 0
      #else
      #define NULL ((void *)0)
      #endif
      
    • 若C++中使用NULL代替0表示空指针,会在函数重载时出现问题

      #include <iostream>
      using namespace std;void func(void* i)
      {cout << "func1" << endl;
      }void func(int i)
      {cout << "func2" << endl;
      }void main(int argc,char* argv[])
      {func(NULL);func(nullptr);getchar();
      }
      

      结果为:

      原因:

      在这段代码中,我们对函数func进行可重载,参数分别是void*类型和int类型,但是运行结果却与我们使用NULL的初衷是相违背的,因为我们本来是想用NULL来代替空指针,但是在将NULL输入到函数中时,它却选择了int形参这个函数版本,所以是有问题的,这就是用NULL代替空指针在C++程序中的二义性

  • 2)代码中的size与index:

    • 代码中的size包括原本真实的头结点,而index的范围是从0开始的,因此,在get函数中的为 index > (size-1),在addAtIndex函数中是index > size

[LeetCode] 707.设计链表相关推荐

  1. leetcode 707 设计链表

    设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一个属性 ...

  2. LeetCode 707. 设计链表(List)

    文章目录 1. 设计一个单链表 2. 双向链表 1. 设计一个单链表 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值.如果索引无效,则返回-1. addAtHea ...

  3. Leetcode 707.设计链表

    传送门:力扣 答案在文后/ 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值.如果索引无效,则返回-1. addAtHead(val):在链表的第一个元素之前添加一 ...

  4. LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)

    文章目录 一.编程题:707. 设计链表(双向链表-带头尾双结点) 1.题目描述 2.示例1: 3.提示: 二.解题思路 1.思路 2.复杂度分析: 3.算法图解(双向链表) 三.代码实现 三.单向链 ...

  5. 力扣707设计链表(单链表,JavaScript)

    1,头指针指向列表第一个元素,尾指针指向链表最后一个元素,链表末尾的index=this.size-1 var MyLinkedList = function() {this.size=0this.h ...

  6. Suzy找到实习了吗Day 3 | 链表开始啦 203移除链表元素 707设计链表 206 反转链表

    定义链表的结构 class ListNode:def __init__(self, val, next=None): #构造函数self.val = valself.next = next 尾部nod ...

  7. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

  8. day03链表基础_移除链表元素_设计链表_反转链表

    链表理论基础 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思). 链表的入口节点称 ...

  9. My Seventh Page - 设计链表 - By Nicolas

    这一篇page对应的是leetcode上面707.设计链表这个题目,首先这个题目的描述还是比较简单的,就是我们可以选择使用单链表或者双链表实现链表对应的增删改查的许多功能.小尼这个题目大部分都是看的题 ...

  10. 设计链表(单链表、双链表)

    707. 设计链表 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表 ...

最新文章

  1. 特斯拉对手再秀“肌肉”,Lucid Motors展示电动汽车雪上漂移
  2. 代码整洁之道,clean code
  3. 【less-11】基于SQLI的POST字符型SQL注入
  4. varbinary mysql_MySQL中的数据类型binary和varbinary详解
  5. Ubuntu20.04安装增强功能
  6. Python学习笔记---day06数据类型(中)
  7. 【python】电商批量打标logo,超快速超简单!!!
  8. js两种滚动事件写法
  9. Windows挂载Linux网络共享文件夹
  10. 央联众商理财公司,我个人的理财观!
  11. Outlook-VBA-06-邮件另存为
  12. teamview+ccproxy实现远程局域网本地访问
  13. linux 下安装xampp
  14. Java实现就诊排队叫号系统(使用ArrayList集合实现)
  15. 方式SingleTask 启动Intent设置 不能如愿打开需要的Activity
  16. 邓亚萍大手笔一掷20亿研发即刻搜索2年就倒闭带来的思考
  17. Qt编写视频播放器(vlc内核)
  18. html屏幕有闪动,笔记本电脑屏幕出现条纹闪烁怎么解决【解决方法】
  19. element table 合并单元格错位或单元格后移
  20. Bitwig Studio v2.4 x64 macOS+Ubuntu+WiN 音乐制作宿主软件下载

热门文章

  1. 将A3排版的PDF内容转成A4纸张
  2. 关于软件试用期功能实现-2018.1.24
  3. golang正则匹配中文字符,查询中文字符会panic退出的问题
  4. 适合新手练习js解密的小站--飞卢小说网登录--第四期
  5. Python编写时钟表turtle
  6. 在Mac下如何制作win7/win10启动盘
  7. arangoDB基本操作
  8. php502 html正常访问,php-fpm 正常启动,nginx也正常启动,但是为什么访问PHP是502
  9. 贴片钽电容封装及规格和参数资料
  10. 修改Android应用名称