链表 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();
}

你可能感兴趣的:(链表 04 查询 & 更新)