算法通关村第一关-链表青铜挑战笔记

这篇具有很好参考价值的文章主要介绍了算法通关村第一关-链表青铜挑战笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

链表

平时我们一般都是用数组,每个数组都会有一个相对应的索引,这样就使得数组能够方便的调用出对应索引得到需要的数据,但是这也造成了一个问题,那就是不好在数组中插入或者删除一个数据,例如 int arr[]={1,2,4,5}如果我想在数组中的2和4中添加一个数据3 那么我们首先就需要考虑一个问题,arr的大小是否足够存下,会不会超出数组大小,再就是添加数据的繁琐,我们需要先将4和5存起来,再将3放原先4的位置,4放5的位置,5再往后放。这样就造成了没必要的计算量。这时候我们就可以使用链表来存储。

链表其实和数组很像,都是按照顺序位置都存储数据再进行调用,但是存储的方法完全不同。数组中都是每个数据存在对应的索引位置,而链表是相对位置。

数组如图算法通关村第一关-链表青铜挑战笔记,java,开发语言

链表如图算法通关村第一关-链表青铜挑战笔记,java,开发语言

从图中能看出链表的连接是靠上一个next所存储的位置,所以不需要考虑大小问题,也不需要考虑数据插入和删除,那么该如何创建链表。

首先我们需要创建节点类

public class Node{
    int var;
    //创建var用来存储数据
    Next next;
    //next用来存储下一个节点
    public Node(int var){
        this.var = var;
    }
    //构造方法传值
}

创建链表

public static void main(String[] args) {
        int[] a = {1,2,3,4,5,6};
        Node node = initLinkedList(a);
    }
    
private static Node initLinkedList{
    Node head =null;
    //将头设为空
    Node newNode0 = new Node(a[0]);
}

这就是一个简单的链表,设置了头,创建了newNode0并给了值a[0]

既然创建了链表,可是链表只有一个并不能存储多个数据,这时候就要创建多个链表并进行连接了

private static Node initLinkedList(int[] a){
    Node head = null;
​
    Node newNode1 = new Node(a[1]);
    Node newNode0 = new Node(a[0]);
    Node newNode2 = new Node(a[2]);
    
    head = newNode0;
    //将newNode0设置为头也就是开始
    newNode0.next = newNode1;
    //用next来对链表进行连接
    newNode1.next = newNode2;
​
​
    return head;
}

可以通过debug右键Evaluate 来进行查看

算法通关村第一关-链表青铜挑战笔记,java,开发语言

这就是一个简单的链表,但是这个链表存在一个问题就是每次读取数据只能往后走并不往前读取数据,如果需要读取前面的数据则需要重头开始浪费大量时间,这时候就需要双向链表。算法通关村第一关-链表青铜挑战笔记,java,开发语言

能从图中看出多了一个peev来连接上一个节点,这也就是双向链表,代码如下

首先在节点类中添加一个prev。

public class Node {
    public int var;
    public Node next;
    public Node prev;
​
    public Node(int var){
        this.var = var;
    }
}

再进行添加prev前一个值

private static Node initLinkedList(int[] a){
    Node head = null;
​
    Node newNode0 = new Node(a[0]);
    Node newNode1 = new Node(a[1]);
    Node newNode2 = new Node(a[2]);
     
    head = newNode0;
    newNode0.next = newNode1;
    newNode1.next = newNode2;
​
    newNode2.prev = newNode1;
    newNode1.prev = newNode0;
    //添加前一个节点数据
    return head;
}

这就是个简单的双向链表。可是讲了半天并没有写出链表方便的增删改,那就从增开始。

因为链表是通过next来确认下一个节点,那么只需要在最后的数据添加一个next

private static Node initLinkedList(int[] a){
    Node head = null;
​
     Node newNode0 = new Node(a[0]);
     Node newNode1 = new Node(a[1]);
     Node newNode2 = new Node(a[2]);
    
    head = newNode0;
    newNode0.next = newNode1;
    newNode1.next = newNode2;
​
    newNode2.prev = newNode1;
    newNode1.prev = newNode0;
    
    //添加当前节点的上一个节点prev 和 上一个节点的next
    Node newNode3 = new Node(a[3]);
    newNode2.next = newNode3;
    newNode3.prev = newNoed2;
    
    return head;
}

算法通关村第一关-链表青铜挑战笔记,java,开发语言

那么删除同理

private static Node initLinkedList(int[] a){ Node head = null;

 Node newNode0 = new Node(a[0]);
 Node newNode1 = new Node(a[1]);
 Node newNode2 = new Node(a[2]);
​
head = newNode0;
newNode0.next = newNode1;
newNode1.next = newNode2;
​
newNode2.prev = newNode1;
newNode1.prev = newNode0;
​
//删除2节点的上一个节点prev 和 上一个节点的next
newNode2.prev = newNode0;
newNode0.next = newNode2;
​
return head;
}

算法通关村第一关-链表青铜挑战笔记,java,开发语言

这就是链表最基础的增删改,感谢观看。文章来源地址https://www.toymoban.com/news/detail-606265.html

到了这里,关于算法通关村第一关-链表青铜挑战笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法通关村第一关——链表青铜挑战笔记

    链表的基本单元就是 节点 ,也就是说链表是由一个一个节点构成的。 而对于节点来说,里面至少会包含一个 指针 和一个 数据元素 ,也就是如下图所示: 其中数据域用来存放数据元素,指针域用来存放指向下一个节点的指针,这样一个一个连接起来的就是链表。如下图所

    2024年02月16日
    浏览(33)
  • [Go版]算法通关村第一关青铜——链表青铜挑战笔记

    单向链表图示: 双向链表图示: 环形单向链表图示: 环形双向链表图示: 源码地址: GitHub-golang版本 如果是单向的,需要将当前节点 定位到要插入节点的前一个节点 ,否则一旦过了将无法回头找到前一个节点 如果是双向的,将当前节点 定位到要插入节点的前一个节点、

    2024年02月13日
    浏览(29)
  • 【无标题】算法通关村第一关——链表青铜挑战笔记

    算法通关村第一关——链表青铜挑战笔记 C语言是如何构造出链表的 0.定义节点结构 1.建立头指针 2.建立temp指针 3.将节点连起来 3.1 把p指向temp 3.2 设立循环节点a+temp指向a+temp变为a

    2024年02月15日
    浏览(29)
  • 算法通关村第一关——链表青铜挑战笔记(单链表)

    在LeeCode中一般这样创建链表 要注意创建一个变量来遍历,不要把head丢掉了 count position - 1可以方便操作,还能防止下标越界(cur为null)

    2024年02月15日
    浏览(30)
  • [Go版]算法通关村第一关——链表青铜挑战笔记

    单向链表图示: 双向链表图示: 环形单向链表图示: 环形双向链表图示: 源码地址: GitHub-golang版本 如果是单向的,需要将当前节点 定位到要插入节点的前一个节点 ,否则一旦过了将无法回头找到前一个节点 如果是双向的,将当前节点 定位到要插入节点的前一个节点、

    2024年02月15日
    浏览(35)
  • 算法通关存第一关------链表青铜挑战笔记

    如上代码其实就已经构造出了一个链表。 定义一个Node结点类,他有两个属性var,和next。由于next是Node类型,这时候next又会指向同为Node类型的对象,这个对象也拥有var,和next两个属性,由此构造出一个链表。 文章最后会有构造链表实例,完整代码。   2.1 插入结点 在插入链

    2024年02月15日
    浏览(29)
  • 编程导航算法通关村第一关|青铜|链表基础

    JVM有栈区和堆区 栈区:存引用,就是指向实际对象的地址。。 堆区:存的是创建的对象。 定义 规范的链表定义 LeetCode算法题中常用 遍历 插入 删除 结点 结构遍历 插入 从头插入 从尾插入 从某个值为key的节点后面插入 删除 删除头结点 删除尾结点 按值删除

    2024年02月15日
    浏览(34)
  • 算法通关村|青铜挑战----链表

    前言:数据结构的基础:创建+增删改查 学习目标:单链表的创建+增删改查,双链表的创建+增删改查 数据域+指针域 数据域:当前节点的元素值 指针域:当前节点保存的下一个节点的元素的地址,其中最后一个元素的指针域指向null 标准的面向对象的节点的定义: LeetCode中节

    2024年02月15日
    浏览(26)
  • 算法通关村第一关——链表经典问题之双指针笔记

    基本结构 1.寻找中间结点 2.寻找倒数第k个元素 3.旋转链表

    2024年02月14日
    浏览(33)
  • 算法通关村第一关——链表经典问题之双指针专题笔记

    我一直觉得双指针是一个非常好用的方法,在链表中可以使用,在数组中依然可以,很灵活。 1. 寻找中间结点         用两个指针 slow 与 fast 一起遍历链表。slow 一次走一步, fast 一次走两步。那么当 fast 到达链表的末尾时,slow 必然位于中间。 2. 寻找倒数第K个元素 在这

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包