有序链表

有序链表是指从头节点开始到链表结尾,链表中的数据项按照某种顺序有序排列的链表结构。

实现有序链表

定义节点类

  1. class Node {
  2. constructor(element) {
  3. this.element = element;
  4. this.next = undefined;
  5. }
  6. }

定义比较常量

  1. const COMPARE = {
  2. LESS_THAN: -1,
  3. BIGER_THAN: 1
  4. }

定义比较函数

  1. const defaultEquals = (a, b) => {
  2. return a === b;
  3. }
  4. const defaultCompare = (a, b) => {
  5. if (a === b) {
  6. return 0;
  7. }
  8. return a < b ? COMPARE.LESS_THAN : COMPARE.BIGER_THAN;
  9. }

定义有序链表类

  1. class SortedLinkedList {
  2. constructor(equalsFn = defaultEquals, compareFn = defaultCompare) {
  3. this.count = 0;
  4. this.head = undefined;
  5. this.equalsFn = equalsFn;
  6. this.compareFn = defaultCompare;
  7. }
  8. }

接下来,我们为链表定义一些链表的方法:
append(element) 向有序链表尾部添加一个新元素
insert(element, index) 向有序链表的特定位置插入一个新元素
getElementAt(index) 返回有序链表中特定位置的元素,若元素不存在,返回 undefined
remove(element) 从有序链表中移除一个元素
removeAt(index) 从现有链表的特定位置移除一个元素
removeHead() 移除首节点
removeTail() 移除尾结点
indexOf(element) 返回指定元素在有序链表中的索引,若没有该元素则返回 -1
head() 返回首节点
tail() 返回尾结点
size() 返回有序链表包含的元素个数,即返回链表的长度
isEmpty() 判断有序链表是否为空
clear() 清空有序链表
toString() 返回表示整个有序链表的字符串

下面,我们逐一实现这些方法:

append 向有序链表尾部添加一个新元素

  1. append(element) {
  2. if (this.isEmtpy()) {
  3. } else {
  4. const index = this.getIndexNextSortedElement(element)
  5. }
  6. }

insert 向有序链表的特定位置插入一个新元素

getElementAt 返回有序链表中特定位置的元素,若元素不存在,返回 undefined

remove 从有序链表中移除一个元素

removeAt 从现有链表的特定位置移除一个元素

removeHead 移除首节点

removeTail 移除尾结点

indexOf 返回指定元素在有序链表中的索引,若没有该元素则返回 -1

head 返回首节点

tail 返回尾结点

size 返回有序链表包含的元素个数,即返回链表的长度

isEmpty 判断有序链表是否为空

clear 清空有序链表

toString 返回表示整个有序链表的字符串