首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LinkedList delete :为什么我们不用previous覆盖head?

在删除链表节点时,通常我们会使用previous节点来删除当前节点。而不使用head节点来覆盖previous节点的原因如下:

  1. 链表的删除操作需要保持链表的连续性。如果我们直接使用head节点来覆盖previous节点,那么在删除节点后,链表的连续性将会被破坏。因为head节点是链表的起始节点,直接覆盖会导致链表的头部丢失,无法继续访问链表的其他节点。
  2. 使用previous节点来删除当前节点可以保持链表的完整性。通过将previous节点的next指针指向当前节点的下一个节点,可以将当前节点从链表中移除,而不会破坏链表的连续性。这样可以确保链表的其他节点仍然可以通过previous节点进行访问。

总结起来,我们不使用previous节点覆盖head节点的原因是为了保持链表的连续性和完整性。通过使用previous节点来删除当前节点,可以确保链表的其他节点仍然可以被正确访问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)

    链表 链表,为什么要有这种数据结构呢?当然,事出必有因! 数组-最常用、最方便的数据结构,But,当我们从数组的起点或中间插入或移动项的成本很高,因为我们需要移动数组元素。...实现链表 我们要实现链表的结构以及对应的方法,大致为:元素插入、移除、获取链表长度、查询元素、是否为空等等...更详细可看代码实现逻辑。...node.next = current this.head = node } else { // 查找到指定索引位置的前一个元素 let previous = this.getElementAt...() 移除指定索引位置的元素 实现逻辑:判断是否为链表第一项,若为第一项,则将this.head指向第二个元素即可;如果不是第一项,则获取索引index位置的上一位置索引元素previous,以及下一位置索引元素.../* LinkedList { count: 2, head: Node { element: 15, next: Node { element

    44010

    「数据结构与算法Javascript描述」链表

    为什么需要链表 在很多编程语言中,数组的长度是固定 的,所以当数组已被数据填满时,再要加入新的元素就会非常困难。...下图演示了从链表中删除“bacon”的过程: image-20220125203236829 链表还有其他一些操作,但插入和删除元素最能说明链表为什么如此有用。 3....设计一个基于对象的链表 我们设计的链表包含两个类。Node 类用来表示节点,LinkedList 类提供了插入节点、删除节点、显示列表元素的方法,以及其他一些辅助方法。...该类也有一个构造函数,使用一个 Node 对象来保存该链表的头节点: function LinkedList() { this.head = new Node('head'); } head 节点的...创建循环链表,只需要修改 LinkedList类的构造函数: function LinkedList() { this.head = new Node('head'); this.head.next

    85720

    探索 Python 中链表的实现:从基础到高级

    实现单向链表让我们首先看一个简单的单向链表的实现:python 代码解读复制代码class Node: def __init__(self, data): self.data = data...self.next = Noneclass LinkedList: def __init__(self): self.head = None def append...(上面的代码) def insert_after(self, prev_node, data): if not prev_node: print("Previous...(node, 2)# 删除节点my_list.delete_node(3)# 展示链表my_list.display()总结链表是一种基本而灵活的数据结构,在Python中通过类的构建可以轻松实现。...通过Node节点和LinkedList类的概念,我们了解了链表是由节点组成的,每个节点包含数据和指向下一个节点的引用。链表在插入和删除操作上表现出高效性,使其成为处理大量数据变动的理想选择。

    5700

    Java 集合系列08: List总结(LinkedList, ArrayList等使用场景和性能分析)

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack)。 第1部分 List概括 先回顾一下List的框架图 ?...ms LinkedList : delete elements from the st position use time: ms ArrayList : delete elements from...第3部分 LinkedList和ArrayList性能差异分析 下面我们看看为什么LinkedList中插入元素很快,而ArrayList中插入元素很慢!...通过上面的分析,我们就能理解为什么LinkedList中插入元素很快,而ArrayList中插入元素很慢。 “删除元素”与“插入元素”的原理类似,这里就不再过多说明。...接下来,我们看看 “为什么LinkedList中随机访问很慢,而ArrayList中随机访问很快”。

    72651

    Java集合详解2:一文读懂Queue和LinkedList

    源码分析 定义 首先我们先看LinkedList的定义: public class LinkedList extends AbstractSequentialList implements...List, Deque, Cloneable, java.io.Serializable 从这段代码中我们可以清晰地看出LinkedList继承AbstractSequentialList...this.next = next; this.previous = previous; } } 上面为Entry对象的源代码,Entry为LinkedList的内部类,它定义了存储的元素...; } return e; } 从该方法有两个遍历方向中我们也可以看出LinkedList是双向链表,这也是在构造方法中为什么需要将header的前...如果对数据结构有点了解,对上面所涉及的内容应该问题,我们只需要清楚一点:LinkedList是双向链表,其余都迎刃而解。 由于篇幅有限,下面将就LinkedList中几个常用的方法进行源码分析。

    1.1K00

    LinkedList浅析

    我们平常使用的list是一样的,理论上来说一种list就可以完成我们所有的需求。但是它们在运行过程中有区别的,完成需求所需要的资源也不相同,至于什么情况下使用哪种list就看需求和当前情况了。...LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。...Entry中包含成员变量: previous, next, element。其中,previous是该节点的上一个节点,next是该节点的下一个节点,element是该节点所包含的值。   ...双向链表结构 双链表(双向链表):双链表和单链表相比,多了一个指向尾指针(tail),双链表的每个结点都有一个头指针head和尾指针tail,双链表相比单链表更容易操作,双链表结点的首结点的head指向为...若要实现不可修改的列表,则需要实现列表迭代器的 hasNext、next、hasPrevious、previous 和 index 方法即可。

    53810

    LinkedList和Queue

    - Java集合类 今天我们来探索一下LinkedList和Queue,以及Stack的源码。 本文参考 http://cmsblogs.com/?...源码分析 定义 首先我们先看LinkedList的定义: public class LinkedList extends AbstractSequentialList implements...List, Deque, Cloneable, java.io.Serializable 从这段代码中我们可以清晰地看出LinkedList继承AbstractSequentialList...; } return e; } 从该方法有两个遍历方向中我们也可以看出LinkedList是双向链表,这也是在构造方法中为什么需要将header的前、后节点均指向自己...如果对数据结构有点了解,对上面所涉及的内容应该问题,我们只需要清楚一点:LinkedList是双向链表,其余都迎刃而解。 由于篇幅有限,下面将就LinkedList中几个常用的方法进行源码分析。

    48410

    TypeScript 实战算法系列(三):实现链表与变相链表

    // 链表不为空,我们只能拿到链表中第一个元素的引用 current = this.head; // 循环访问链表 while (...编写测试代码 链表实现后,接下来我们来测试下链表中的每个函数是否正常工作 const linkedList = new LinkedList(); linkedList.push(12); linkedList.push...(13); linkedList.push(14); linkedList.push(15); linkedList.push(16); linkedList.push(17); linkedList.push...实现代码 我们捋清思路后,将上述思路转化为代码 新建CircularLinkedList.ts文件,用于实现循环链表类 声明CircularLinkedList类并继承LinkedList export...,接下来我们将上述思路转化为代码: 新建OrderedList.ts文件,用于实现有序链表 声明OrderedList类,继承LinkedList类 export default class OrderedList

    1.8K10

    TypeScript实现链表与变相链表

    // 链表不为空,我们只能拿到链表中第一个元素的引用 current = this.head; // 循环访问链表 while (...编写测试代码 链表实现后,接下来我们来测试下链表中的每个函数是否正常工作 const linkedList = new LinkedList(); linkedList.push(12); linkedList.push...(13); linkedList.push(14); linkedList.push(15); linkedList.push(16); linkedList.push(17); linkedList.push...实现代码 我们捋清思路后,将上述思路转化为代码 新建CircularLinkedList.ts文件,用于实现循环链表类 声明CircularLinkedList类并继承LinkedList export...,接下来我们将上述思路转化为代码: 新建OrderedList.ts文件,用于实现有序链表 声明OrderedList类,继承LinkedList类 export default class OrderedList

    96220

    从 LRU Cache 带你看面试的本质

    技术面试究竟在考什么 在人人都知道刷题的今天,面试官也都知道大家会刷题准备面试,代码大家都会写,那面试为什么还在考这些题?那为什么有些人代码写出来了还挂了?...这个算法其实很高效,但是耗资源,所以一般不用。 LRU (Least Recently Used) 这是目前最常用了。...但是删除时我还需要一个 previous pointer 才能删掉,所以我需要一个 Doubly LinkedList. ?...那我们就先假设这两个数据结构存的都是 ,然后来看这些操作,如果都很顺利,那没问题,如果有问题,我们再调整。 那现在我们的 HashMap 和 LinkedList 长这样: ?...之后我们更新、移动每个 node 时,它的 reference 也不需要变,所以 HashMap 也不用改动,动的只是 previous, next pointer.

    49231
    领券