这一篇page对应的是leetcode上面707.设计链表这个题目,首先这个题目的描述还是比较简单的,就是我们可以选择使用单链表或者双链表实现链表对应的增删改查的许多功能。小尼这个题目大部分都是看的题解做出来的,确实链表小尼一年多都没有写了,确实忘了(丢脸啊,哈哈哈)。好了,小尼复习了之后,写出功能还是没什么大问题。首先对于单链表来说,就是有表头和一个索引(其实这个索引就是一种指针的概念),然后这个索引一个一个可以指下一个元素,这样就可以使元素串起来形成一个链表,然后就是链表的定义,这个是需要我们自己再编辑器里面写的,小尼写一下。

public Node head;

public int N;//用于记录链表的长度

public class Node{

int num;

Node next;

public Node(int num,Node next){

this.num = num;

this.next = next;

}

public MyNode(){

this.head = new Node(null,null);

this.N = 0;//初始化元素的个数

}

}

其实单链表也很简单,无非就是由两个大的部分后成,一个是中间的num值以及它的下一个指向的next对应的是谁,创建完了之后对功能进行实现就可以了

但是小尼在提交这道题的时候是使用了双链表的结果

拉一下代码

class Node {public int val;public Node next, prev;public Node(int _val, Node _next, Node _prev) {val = _val; next = _next; prev = _prev;}public Node(int _val) {val = _val; next = null; prev = null;}
}class MyLinkedList {private Node head;private int size;public MyLinkedList() {head = new Node(0);head.next = head; head.prev = head;size = 0;}public int get(int index) {if (index >= size || index < 0) return -1;Node p = head.next;for (; index > 0; --index) p = p.next;return p.val;}public void addAtHead(int val) {Node cur = new Node(val, head.next, head);head.next.prev = cur;head.next = cur;++size;}public void addAtTail(int val) {Node cur = new Node(val, head, head.prev);head.prev.next = cur;head.prev = cur;++size;}public void addAtIndex(int index, int val) {if (index > size) return;Node p = head;for (; index > 0; --index) p = p.next;Node cur = new Node(val, p.next, p);p.next.prev = cur;p.next = cur;++size;}public void deleteAtIndex(int index) {if (index < 0 || index >= size) return;Node p = head;for (; index > 0; --index) p = p.next;Node cur = p.next;cur.next.prev = p;p.next = cur.next;--size;}private void printall() {Node p = head.next;System.out.printf("Head ");for (int i = 0; i < size; ++i) {System.out.printf(". %d", p.val);p = p.next;}if (p != head) System.out.printf(". Cycle(%d)!", p.val);System.out.printf("\n");}
}

今天小尼继更一下下啊,小尼针对上面的写出的双向链表做一个解释,我们但凡在使用链表的时候,我们首先要做的一定是需要先定义我们的这个链表,也就是上面这段代码所写出的class Node这一段,对于双向链表来说,里卖的元素主要有三个,一个是值,还有就是头节点和下一个节点,就是相对于单链表来说多了一个头节点,就是上一个节点要说出来。小尼接下来写一下并且解释一下我们定义的node类中加入的元素以及为什么要这样写出来

class Node{

int val;//这就是我们增加的新的节点对应的值

Node next;//这就是我们新添节点的下一个节点值

Node prev;//这就是我们新添的节点的上一个节点值

public Node(int _val, Node _next, Node _prev){

val = _val;

next = _next;

prev = _prev;

public Node(int _val){

val = _val;

next  = null;

prev = null;

}

}

}

这里小尼帮助大家好好理解一下,在我们的两个构造方法之前我们先加入三个参数。第一个构造方法中我们会加入一个新的节点,我们将加入的节点的三个参数与我们定义的三个参数完美匹配上。我们先完成了匹配这个操作,再就是我们需要将节点进行一个定义,于是我们就写出了第二个构造方法,这个构造方法只需要传入一个人val值也就是只需要传入一个单纯的数值就可以了,然后我们的next和prev给出一个空的定义也就是上面给出的null的定义,这样我们就可以只需要对Node给出需要的三个参数,实现一个新的节点

My Seventh Page - 设计链表 - By Nicolas相关推荐

  1. Innodb Buffer Pool的三种Page和链表

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 王航威 来源 | 公众号「yangyidba」 ...

  2. 卷进大厂系列之LeetCode刷题笔记:设计链表(中等)

    学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下 ...

  3. Java设计链表(不带头结点的单链表)

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

  4. leetcode设计链表,非常工整的实现你值得拥有

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

  5. 设计链表(Leetcode第707题)

    此题涵盖了链表的常见操作,是练习链表操作非常好的一道题目 此题涵盖了链表的常见操作,是练习链表操作非常好的一道题目 此题涵盖了链表的常见操作,是练习链表操作非常好的一道题目 题目描述: 设计链表的实现 ...

  6. python求单链表的长度_709. 设计链表(Python)

    题目 难度:★★☆☆☆ 类型:链表,设计题 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针 ...

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

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

  8. 链表-1(链表理论基础、移除链表元素、设计链表翻转链表)

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

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

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

最新文章

  1. 图像有用区域 bfs
  2. tableau使用需要收费吗_使用苹果手机时,这些需要注意的点,你都知道吗?
  3. Java生鲜电商平台-高并发核心技术订单与库存实战
  4. Quartz中时间表达式的设置-----corn表达式
  5. IIS——屏蔽返回的Header中的 IIS版本信息
  6. android使用SwipeRefreshLayout下拉刷新
  7. 哇塞,原来自己写 Google Chrome 浏览器扩展(插件)这么容易!
  8. WebSocket 是什么原理?为什么可以实现持久连接?
  9. 计算机应用 行动计划范文,制定计算机学习计划范文3篇0001.docx
  10. 镜头焦距和视角大小计算
  11. 软件测试简历上的职业技能怎么写,测试工程师岗位个人简历个人技能范文
  12. 印度舞曲吉米来吧(中文版)铃声 印度舞曲吉米来吧(中文版)手机...
  13. linux centos7以上的自带监控界面cockpit案例
  14. [Pytorch函数].repeat()
  15. python 发送outlook邮件(html)格式需要避的坑
  16. 1-Java的诞生和发展
  17. 什么是邮箱短息登录验证,如何开启或关闭?
  18. python爬取王者荣耀皮肤集
  19. 无向图的最大独立集和最大团
  20. EasyNVR结合阿里云/腾讯云CDN实现微信/小程序直播的方案

热门文章

  1. 七天七夜,直播也救不了天涯?网友们的青春回忆还能重启吗?
  2. 用c++做双人枪战游戏
  3. 计算机应用财会,财会与计算机应用专业生的自我评价
  4. 计算机应用基础改革,高职计算机应用基础改革
  5. linux中的ens33配置
  6. 使用dlib库进行人脸识别
  7. 借势如泳装,尤爱三点式
  8. 用JAVA将繁体中文转化为简体中文
  9. Oracle关闭回收站
  10. IT业称霸应届生薪酬榜,调查超27万毕业生后,有了这些发现