学习js数据结构与算法-链表(5)

103 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。

个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。

第十五天:继续了解链表

  • 从任意位置移除节点

    前面我们已经做了在任意位置添加节点了,现在我们来实现一下在任意位置上移除节点。从双向链表中移除元素跟链表非常类似。唯一的区别就是,还需要设置前一个位置的指针。

    function remove(index) {
    	if(index >= 0 && index < this.count) {
        	let current = this.head
        	if(index === 0) {
            this.head = current.next
            if(this.count === 1) {
              this.tail = null
            }else {
              this.head.prev = null
            }
          }else if(index === this.count - 1){
            current = this.tail
            this.tail = current.prev
            this.tail.next = null
          }else {
            current = this.getElementAt(index)
            cosnt previous = current.prev
            previous.next = current.next
            current.next.prev = previous
          }
        this.count--
        return current.element
      }
      return null
    }
    

    首先还是和之前的一样,先处理边界情况。

    第一个种就是移除第一个节点,移除第一个节点也会有两种情况,第一个种:当前的双向链表只有一个节点,那么需要将头指针和尾指针都指向空。第二种是双向链表的长度不止一个,需要将当前移除的节点的下一个节点的头指针置为null。具体操作可以看下面的图

image.png

第二种就是移除最后一个节点,我们需要将当前需要移除的节点的上一个节点的尾指针指向null,将尾指针指向上一个节点。具体操作可以看下面的图

image.png

最后一个种是中间任意位置的,我们需要用辅助函数找当前需要移除的节点,然后根据这个移除的节点,设置上一个节点,需要将上一个节点的尾指针指向当前节点的下一个节点,下一个节点的头指针指向上一个节点。具体操作可以看下面的图

image.png