链表 04 查询 & 更新

获取 - E get(int index)

  • 注意获取元素时的合法索引,如果size = 3,那么合法的获取位置是:0,1,2,即0到size - 1;
  • 遍历初始时,让游标cur指向索引为0的节点;当i = 0时,cur指向索引为1的节点;当i == index - 1时(循环停止的位置),cur指向索引为index的节点,即要删除节点的位置(在做这一步分析的时候,很像枚举数列的前几个数,然后找规律的感觉);
// 获得链表的第index(0-based)个位置的元素
// 在链表中不是一个常用的操作,练习用:)
public E get(int index){

    if(index < 0 || index >= size)
        throw new IllegalArgumentException("Get failed. Illegal index.");

    Node cur = dummyHead.next;
    for(int i = 0 ; i < index ; i ++)
        cur = cur.next;
    return cur.e;
}

// 获得链表的第一个元素
public E getFirst(){
    return get(0);
}

// 获得链表的最后一个元素
public E getLast(){
    return get(size - 1);
}

更新 - void set(int index, E e)

  • 注意更新元素时的合法索引,如果size = 3,那么合法的获取位置是:0,1,2,即0到size - 1;
  • 遍历初始时,让游标cur指向索引为0的节点;当i = 0时,cur指向索引为1的节点;当i == index - 1时(循环停止的位置),cur指向索引为index的节点,即待更新节点的位置(在做这一步分析的时候,很像枚举数列的前几个数,然后找规律的感觉);
// 修改链表的第index(0-based)个位置的元素为e
// 在链表中不是一个常用的操作,练习用:)
public void set(int index, E e){
    if(index < 0 || index >= size)
        throw new IllegalArgumentException("Set failed. Illegal index.");

    Node cur = dummyHead.next;
    for(int i = 0 ; i < index ; i ++)
        cur = cur.next;
    cur.e = e;
}

包含 - boolean contains(E e)

  • 注意遍历的方式改为while循环;
  • 从索引为0的节点开始遍历;
  • 循环终止的条件是游标cur指向null了,因为在链表中,节点一个接一个不会中间出现null,如果游标cur == null了,只有一种可能,cur指向了最后一个节点(索引为size - 1的元素)的下一个位置(索引为size的位置);
// 查找链表中是否有元素e
public boolean contains(E e){
    Node cur = dummyHead.next;
    while(cur != null){
        if(cur.e.equals(e))
            return true;
        cur = cur.next;
    }
    return false;
}

String toString()

  • 注意while循环的等价for循环写法;
@Override
public String toString(){
    StringBuilder res = new StringBuilder();

//        Node cur = dummyHead.next;
//        while(cur != null){
//            res.append(cur + "->");
//            cur = cur.next;
//        }
    for(Node cur = dummyHead.next ; cur != null ; cur = cur.next)
        res.append(cur + "->");
    res.append("NULL");

    return res.toString();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值