在上一节的基础上,我们来学习单向链表的insert,get,idnexOf,update操作
LinkList.prototype.insert=(position,data)=>{
// 1.对越界的position进行判断
// 对长度的判断
if (position<0||position>this.length)return false
// 根据data 创建节点
let newNode=new Node()
// 判断插入的位置是否是第一个
// position代表的是下标值!
if (position===0){
//这个可以画图理解,第一个节点为1,插入到第一个节点的时候,我们这样想
//原来的this.head指针指向的是原来的第一个节点,我们现在将指针指向的原来的第一个节点赋值给新节点
//在这个过程中,head的指针并不会发生变化,我再将head指向新节点,画图参考想,好理解!
// 这样我们就实现了插入第一个节点的过程
newNode.next=this.head;
this.head=newNode
}else {
let index =0//下标
let current =this.head//确认要插入的位置,比如插入在第6的位置,这个current代表的是6,
let previous =null
//我们就要插入的就是在6之前5之后,5用previous表示
while (index++ < position) {
//在进行插入之前,previous总是在current的前一位
previous = current
current = current.next
}
newNode.next = current
previous.next = newNode
}
// 4.length
this.length+=1
}
// 4.get方法
LinkList.prototype.get=(position)=>{
// 1.越界判断
if (position<0||position>this.length)return null
// 2.获取对应的data
let current=this.head;
let index=0;
while (index++
current=current.next
}
return current.data
}
// 5.indexOf方法
LinkList.prototype.indexOf=(data)=>{
// 1.定义变量
let current=this.head;
let index=0
// 2.查找变量
while (current){
if (current.data===data){
return index
}
current=current.next
index++;
// 3.未查找到返回-1
}
return -1
}
// 6.updata方法
LinkList.prototype.update=(position,newData)=>{
// 1.越界判断
if (position<0||position>=this.length)return false
// 2.查找判断
let current=this.head;
let index=0;
while(index++
current=current.next
}
//3.将position位置的node上的data更新为newData
current.data=newData
return true
}
}