1,头指针指向列表第一个元素,尾指针指向链表最后一个元素,链表末尾的index=this.size-1
var MyLinkedList = function() {
this.size=0
this.head=null
this.tail=null
};
//创建节点的函数
var Node=function(val,next){
this.val=val ||0
this.next=next || null
}
/**
* @param {number} index
* @return {number}
*/
MyLinkedList.prototype.get = function(index) {
//如果大于this.size-1,无效
if(index>this.size-1){
return -1
}
//如果index是头节点
if(index===0){
return this.head.val
}
//如果是尾节点(尾节点指向最后一个节点)
if(index===this.size-1){
return this.tail.val
}
//index是0到(this.size-1)的值
//找到index
let temp=this.head
let i=0
while(i<index){
i++
temp=temp.next
}
return temp.val
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtHead = function(val) {
//如果链表为空
if(this.head===null){
//头指针和为指针都指向新添加的节点
this.head=this.tail=new Node(val)
//更新链表长度
this.size++
return
}
//链表不为空
//创建新节点,next指向原this.head
let node=new Node(val,this.head)
//更新头节点
this.head=node
//更新链表长度
this.size++
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtTail = function(val) {
//如果为空链表
if(this.head===null){
//头指针和为指针都指向新添加的节点
this.head=this.tail=new Node(val)
//更新链表长度
this.size++
return
}
//链表不为空
//把尾指针指向该新节点
let node=new Node(val)
//连接
this.tail.next=node
//更新尾节点
this.tail=node
//更新长度
this.size++
};
/**
* @param {number} index
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtIndex = function(index, val) {
//index超出链表长度
if(index>this.size){
return false
}
//index<=0,在第一个位置插入
if(index<=0){
return this.addAtHead(val)
}
//index==this.size,在末尾插入
if(index===this.size){
return this.addAtTail(val)
}
//index是1到(this.size-1)处插入
//插入应找到index-1的位置
let i=0
let temp=this.head
while(i<index-1){
temp=temp.next
i++
}
//创建新节点
let node=new Node(val)
//插入
//连接
let cur=temp.next
temp.next=node
node.next=cur
this.size++
};
/**
* @param {number} index
* @return {void}
*/
MyLinkedList.prototype.deleteAtIndex = function(index) {
//index超出范围
if(index>this.size-1){
return
}
//删除头节点
if(index===0){
this.head=this.head.next
this.size--
return
}
//删除index(1到this.size-1)
//找到index-1
let i=0
let temp=this.head
while(i<index-1){
temp=temp.next
i++
}
//删除
temp.next=temp.next.next
//如果是尾节点,需要更新尾指针
if(index===this.size-1){
this.tail=temp
}
this.size--
};
参考此视频讲解707.设计链表_哔哩哔哩_bilibili