leetcode707 链表操作

题主没有通过测试好多次,都是在>=还是>上出现了问题

 这个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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值