js 实现单向链表
Posted hua-shao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 实现单向链表相关的知识,希望对你有一定的参考价值。
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 通过指针连接起来,但是只能单向遍历的内存块。由于它是单向的,或者说不可逆的,所以我们可以把它比作我们的人生:小学->中学->大学->工作->养老。
实现过程
var Node = function (data) { this.data = data; this.next = null; }; var LList = function () { this.firstNode = null; this.lastNode = null; this.length = 0; }; LList.prototype = { clear: function () { this.firstNode = null; this.lastNode = null; this.length = 0; }, get: function (position) { var currentNode = this.firstNode; for (var i = 1; i < position + 1; i++) { currentNode = currentNode.next; } return currentNode; }, isEmpty: function () { var result = false; if (this.length == 0 && this.firstNode == null) { result = true; } return result; }, add: function () { if (arguments.length == 1) { data = arguments[0]; var newNode = new Node(data); if (this.isEmpty()) { this.firstNode = newNode; } else { this.lastNode.next = newNode; } this.lastNode = newNode; this.length++; return true; } else if (arguments.length == 2) { var isSuccessful = true; var position = arguments[0]; var data = arguments[1]; if (position < this.length + 1) { var newNode = new Node(data); if (this.isEmpty()) { this.firstNode = newNode; this.lastNode = newNode; } else if (position == this.length) { this.lastNode.next = newNode; this.lastNode = newNode; } else if (position == 0) { newNode.next = this.firstNode; this.firstNode = newNode; } else { var nodeBefore = this.get(position - 1); var nodeAfter = nodeBefore.next; newNode.next = nodeAfter; nodeBefore.next = newNode; } this.length++; } else { isSuccessful = false; } return isSuccessful; } }, display: function () { var str = ‘‘; var currentNode = this.firstNode; while (currentNode != null) { str += currentNode.data + ‘, ‘ currentNode = currentNode.next; } str = str.substr(0, str.length - 2); console.log(str); }, remove: function (position) { var result = null; if (!this.isEmpty() && (position < this.length)) { if (position == 0) { result = this.firstNode.data; this.firstNode = this.firstNode.next; this.lastNode = null; } else { var nodeBefore = this.get(position - 1); var nodeToRemove = nodeBefore.next; var nodeAfter = nodeToRemove.next; nodeBefore.next = nodeAfter; result = nodeToRemove.data; if (position == this.length - 1) { this.lastNode = nodeBefore; } } this.length--; } return result; }, set: function (position, data) { var isSuccessfule = true; if (!this.isEmpty() && (position < this.length)) { var desireNode = this.get(position); desireNode.data = data; } else { isSuccessfule = false; } return isSuccessfule; }, contains: function (data) { var found = false; var currentNode = this.firstNode; while (!found && (currentNode != null)) { if (data === currentNode.data) { found = true; } else { currentNode = currentNode.next; } } return found; }, size: function() { return this.length; }, reverse: function() { var newList = new LList(); for(var i=this.length-1; i>=0; i--) { newList.add(this.get(i).data); } return newList; } };
以上是关于js 实现单向链表的主要内容,如果未能解决你的问题,请参考以下文章