「这是我参与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。具体操作可以看下面的图
第二种就是移除最后一个节点,我们需要将当前需要移除的节点的上一个节点的尾指针指向null,将尾指针指向上一个节点。具体操作可以看下面的图
最后一个种是中间任意位置的,我们需要用辅助函数找当前需要移除的节点,然后根据这个移除的节点,设置上一个节点,需要将上一个节点的尾指针指向当前节点的下一个节点,下一个节点的头指针指向上一个节点。具体操作可以看下面的图