JS实现单链表、单循环链表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JS实现单链表、单循环链表

链表

链表是⼀种物理存储单元上⾮线性、⾮连续性的数据结构(它在数据逻辑上是线性的),它的每个节点由两个域组成:数据域和指针域。数据域中存储实际数据,指针域则存储着指针信息,指向链表中的下⼀个元素或者上⼀个元素。正是由于指针的存在,链表的存储在物理单元是⾮连续性的。

链表的优点和缺点同样明显。和线性表相⽐,链表在添加和删除节点上的效率更⾼,因为其只需要修改指针信息即可完成操作,⽽不像线性表(数组)那样需要移动元素。同样的,链表的长度在理论上也是⽆限的(在存储器容量范围内),并可以动态变化长度,相⽐线性表优势很⼤。相应的,由于线性表⽆法随机访问节点,只能通过指针顺着链表进⾏遍历查询来访问,故其访问数据元素的效率⽐较低。

JS实现单链表

function LinkedList() {

let Node = function (ele) {

this.ele = ele;

this.next = null;

}

let length = 0,

head = null; //头指针

//向尾部追加元素

this.append = function (ele) {

let node = new Node(ele),

temp; //临时指针

if (!head) {

head = node;

} else {

temp = head;

while (temp.next) {

temp = temp.next

}

temp.next = node;

}

length++;

return true;

}

//插⼊到指定位置

this.insert = function (position, ele) {

if (position >= 0 && position < length) {

let node = new Node(ele),

temp = head,

index = 0,

previous;

if (position == 0) {

node.next = temp;

head = node;

} else {

while (index++ < position) {

previous = temp;

temp = temp.next;

}

node.next = temp;

previous.next = node;

}

length++;

return true;

} else {

return false;

}

}

//删除指定位置元素

this.removeAt = function (position) {

if (position > -1 && position < length) {

let temp = head,

previous,

index = 0;

if (position == 0) {

head = head.next;

} else {

while (index++ < position) { previous = temp;

temp = temp.next;

}

previous.next = temp.next; }

length--;

return temp.ele;

} else {

return null;

}

}

//删除所有值为ele的元素

this.removeEle = function (ele) {

let temp = head,

previous,

num = 0;

if (ele == temp.ele) {

head = head.next;

length--;

num++;

}

while (temp.next) {

previous = temp;

temp = temp.next;

if (temp.ele == ele) {

previous.next = temp.next; length--;

num++;

}

}

return num;

}

//删除最后⼀个元素

this.pop = function () {

let temp = head,

previous = temp;

if (length < 1) {

return false;

}

if (length == 1) {

head = null;

length--;

return temp.ele;

}

while (temp.next) {

previous = temp;

temp = temp.next;

}

previous.next = null;

length--;

return temp.ele;

}

this.indexOf = function (ele) {

let temp = head,

index = 0;

while (temp) {

if (temp.ele == ele) {

return index;

}

temp = temp.next;

index++;

}

return -1;

}

this.toString = function () {

let temp = head,

string = '';

while (temp) {

string += temp.ele + ' ';

temp = temp.next;

相关文档
最新文档