您的位置:首页 > 其它

链表----链表中元素的获取、查询和修改

2019-04-02 12:18 323 查看

本节是在上一小节的基础上继续完善我们的链表相关方法的编写,在本节中我们着重对如何获取链表中元素、查询元素以及修改元素进行学习。

一、获取元素

1.关于获取链表中元素的方法的分析

由于我们使用了虚拟头结点,而我们每次都需要从第一个真实节点开始,因此需要首先得到虚拟头结点的下一个节点是谁,然后在此基础上进行遍历工作,相关代码如下:

//获取链表的第index(0-based)个位置的元素   (实际不常用,练习用)
public E get(int index) {
//合法性判断
if (index < 0 || index >= size) {
throw new IllegalArgumentException("Get failed,Illegal index");
}

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

2.获得链表的第一个元素

对于该方法则是依靠在get()方法的。

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

3.获得链表的最后一个元素

对于该方法页是依靠在get()方法的。

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

 

二、修改链表元素

由于我们使用了虚拟头结点,而我们每次都需要从第一个真实节点开始,因此需要首先得到虚拟头结点的下一个节点是谁,然后在此基础上进行遍历工作,相关代码如下:

//修改链表的第index(0-based)个位置的元素   (实际不常用,练习用)
public void set(int index, E e) {
//合法性判断
if (index < 0 || index >= size) {
throw new IllegalArgumentException("update failed,Illegal index");
}

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

三、判断是否有元素e

由于我们使用了虚拟头结点,而我们每次都需要从第一个真实节点开始,因此需要首先得到虚拟头结点的下一个节点是谁,然后判断给定的元素值与链表中的元素值内容是否相等(equals()方法),若相等则返回true,否则返回false。

//查找链表中是否有元素e
public boolean contains(E e) {
Node<E> cur = dummyHead.next;
while (cur != null) {
if (cur.e.equals(e)) {
return true;
}
cur = cur.next;
}
return false;
}

四、toString()方法的重写

为了在输出该链表对象时可以查看相关自定义的信息,我们对toString()进行重写改造。

//重写object类,便于测试
@Override
public String toString() {
StringBuilder res = new StringBuilder();
Node<E> cur = dummyHead.next;
while (cur != null) {
res.append(cur + "->");
cur = cur.next;
}

res.append("NULL");

return res.toString();
}

此时该方法等同于

//重写object类,便于测试
@Override
public String toString() {
StringBuilder res = new StringBuilder();

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

return res.toString();
}

 

 

五、测试

新建一个main函数,填写相关测试代码如下:

package LinkedList;

public class TestMain {
public static void main(String[] args) {
LinkedList<Integer> linkedList = new LinkedList<Integer>();

System.out.println("============在链表头部添加============");
for (int i = 0; i < 5; i++) {
linkedList.addFirst(i);
System.out.println(linkedList);
}

System.out.println("============修改链表============");
linkedList.set(2,666);
System.out.println(linkedList);
}
}

结果为:

结果分析:由于是在链表头部添加元素,故最终显示结果为从右到左,最右为NULL(也就是最后一个节点)。

 关于本小节,若您觉得还行、还过得去,麻烦给个推荐吧,谢谢!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: