关于JS中的链表
最近在看数据结构与算法JavaScript描述,在链表这一章遇到了点问题,问题描述如下
要删除链表中的item节点,prevNode是item节点的前一个节点
书中用了 prevNode.next = prevNode.next.next; 来改变链表的指向。
但是我的理解是prevNode.next = item,然后试着利用prevNode.next = item.next删除链表,但是这时候的结果相当于就把链表断开了,只留下了prevNode和之前的节点。
希望各路大神能解答一下疑惑,万分感谢。
感谢 改名字很伤神 的指正,以下是书中的代码
//Node类表示节点
function Node(element){
this.element = element;
this.next = null;
}
//LinkedList类提供了插入节点、删除节点、显示列表元素的方法以及其他一些辅助方法
function LList(){
this.head = new Node("head"); //head节点的next属性被初始化为null,当有新元素插入时,next会指向新的元素,所以这里没有修改next的值
this.find = find;
this.findPrevious = findPrevious;
this.insert = insert;
this.remove = remove;
this.display = display;
}
function find(item){
var currNode = this.head;
while(currNode.element != item){
currNode = currNode.next;
}
return currNode;
}
function insert(newElement,item){
var newNode = new Node(newElement);
var current = this.find(item);
newNode.next = current.next;
current.next = newNode;
}
//remove方法要先找到要删除item的前一个node
function findPrevious(item){
var currNode = this.head;
while(!(currNode.next==null) && (currNode.next.element!=item)){
currNode=currNode.next;
}
return currNode;
}
function remove(item){
var prevNode = this.findPrevious(item);
if(!(prevNode.next==null)){
prevNode.next = prevNode.next.next; //###########这一句是有疑惑的地方
}
}
function display(){
var currNode = this.head;
while(!(currNode.next==null)){
console.log(currNode.next.element); //当前下一个节点中保存的数据current.next.element
currNode = currNode.next;
}
}
//测试程序
var cities = new LList();
cities.insert('徐州','head');
cities.insert('苏州','徐州');
cities.insert('南京','苏州');
cities.insert('无锡','南京');
cities.display()
console.log(cities.find('苏州'))
cities.remove('苏州');
cities.display();
console.log(cities.find('head'))
此时输出的结果是:
但是如果我把remove()方法里面的prevNode.next = prevNode.next.next;
改成prevNode.next = item.next;结果就变成下图所示
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看了下你贴的代码,是你把此item和彼item理解混了
这里的item其实应该是itemName
所以按你的方法应该这样写