题主没有通过测试好多次,都是在>=还是>上出现了问题
这个while些比较好理解一些,but....
光想没用,画图实在些
假设查询、插入、删除的index都是1,那么:
查询:
i<=1
i为=0:虚到头
i为1:头到1
插入:
i<1,i为0:指在头上,插入删除操作就是在前驱上进行。不能在本身index操作
public int get(int index) {
if(index<0||index>=N){return -1;}//若等于N则退出:下标是0到N-1
Node temp=this.head;//建立临时节点
//遍历只到index,到目标位置则跳出,返回temp的值
for (int i=0;i<=index;i++){//为什么要到达index
//假设index为1.i=0,1
temp=temp.next;
}
return temp.val;
}
public void addAtIndex(int index, int val) {
if(index>N){return ;}//这里可以等于N,相当于插入最后一个
if(index<=0){index= 0;}
N++;
//虚拟节点指向头节点,也就是说:头节点的前驱是虚拟节点
Node temp=head;
//从0开始加到index,每加一个“头指针”都会后移动,加停止的时候指index的位置
for(int i=0;i<index;i++){
//假设index=1,i<i即i为0,temp到了1位置
temp=temp.next;
}
//新建节点,进行插入操作;
Node addnode=new Node(val);
addnode.next=temp.next;//新节点指向 temp原来指向的,也就是temp.next
temp.next=addnode;//temp的next指向新节点
}
public void deleteAtIndex(int index) {
if(index<0||index>=N)return;
N--;
Node temp=head;
for (int i = 0; i <index; i++) {
temp=temp.next;
}
temp.next=temp.next.next;
}