链表----链表中元素的获取、查询和修改
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(也就是最后一个节点)。
关于本小节,若您觉得还行、还过得去,麻烦给个推荐吧,谢谢!!
相关文章推荐
- C++实现矩阵类型的基本操作:创建矩阵(M x N)、释放内存、获取某一元素的值、修改某一元素的值、乘法操作
- java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)
- hdu 1754 块状链表 单点修改+单点查询
- 批量修改以及获取多个CheckBox元素相关处理
- 原生js和jquery获取修改元素
- Revit二次开发入门——获取和修改元素参数
- dom4j修改,获取,增加xml中某个元素的属性值
- C#获取与修改HTML DOM元素信息
- DOM概念 修改元素 获取元素 添加
- JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
- 原生style 与 jquery 获取修改元素总结
- 使用jquery操作元素的css样式(获取、修改等等)
- dom4j修改,获取,增加xml中某个元素的属性值
- 02JavaScript动画DOM——获取节点、动态创建、添加、修改、删除、克隆元素
- JS获取页面元素并修改
- js获取多个标签元素的内容,并根据元素的内容修改标签的属性
- 如何获取与修改元素样式(写在style文件)
- 【EasyUI】Maven+Servlet项目进行DataGrid获取、查询、新增、删除、修改
- dom4j学习笔记[3]---获取、修改XML元素