<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//Node类:element用来保存节点上的数据,next用来保存指向下一个节点的链接。使用构造函数创建节点:
function Node(element)
{
this.element=element;
this.next=null;
}
//该类的功能包括插入删除节点、在列表中查找给定的值。
function LList()
{
this.head=new Node('head');//使用一个Node对象来保存该链表的头节点,head节点的next属性被初始化为null,当有新元素插入时,next会指向新的元素
this.find=find;
this.insert=insert;
this.remove=remove;
this.findPrevious=findPrevious;
this.display=display;
}
//插入新节点:向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点
//find方法:遍历链表,查找给定数据。如果找到数据,该方法就返回保存该数据的节点()
function find(item)//在已知节点的后面插入
{
var currentNode=this.head;
while (currentNode.element!=item)//判断item是否为我们需要查询的element
{
currentNode=currentNode.next;
}
return currentNode;
}
function insert(newElement,item)
{
var newNode=new Node(newElement);
var current=this.find(item);
newNode.next=item.next;
current.next=newNode;
}
//从链表中删除节点: 需要找到带删除节点前面的节点,找到这个节点后,修改它的next属性,使其不再指向带删除的节点,而是指向带删除节点的下一个节点
function findPrevious(item)
{
var currentNode=this.head;
while ((currentNode.next!=null)&&(currentNode.next.element!=item))//这里的currentNode指的是被删除节点的前一个节点
{
currentNode=currentNode.next;
}
return currentNode;
}
//remove方法
function remove(item)
{
var previousNode=this.findPrevious(item);
if (previousNode.next.element!==null)
{
previousNode.next=previousNode.next.next;
}
}
//display方法:显示链表中的元素
function display()
{
var currentNode=this.head;
while (currentNode.next!=null)
{
console.info(currentNode.next.element);
currentNode=currentNode.next;
}
}
//测试代码
var cities=new LList();
cities.insert("Nanjing","head");//在head元素的后面插入Nanjing
cities.insert("Yancheng","Nanjing");//在Nanjing的后面插入Yancheng
cities.insert("Suzhou","Yancheng");
cities.insert("Yangzhou","Suzhou");
cities.display();//Nanjing Yancheng Suzhou Yangzhou
cities.remove("Yancheng");//删除Yancheng
cities.display();//Nanjing Suzhou Yangzhou
</script>
</body>
</html>
单向链表实现:插入节点、删除节点操作
猜你喜欢
转载自blog.csdn.net/qq_26102281/article/details/85270711
今日推荐
周排行