线性表中模拟单链表(add/remove)操作

网友投稿 592 2022-11-21

线性表中模拟单链表(add/remove)操作

线性表中模拟单链表(add/remove)操作

模拟类

package day03;/** * @Author yqq * @Date 2022/05/05 11:41 * @Version 1.0 * 模拟单链表的实现 */public class SingleLinkedList { /** * 用于保存单链表中的首节点 */ private Node headNode; /** * 用于保存单链表中的尾结点 */ private Node lastNode; /** * 用于保存单链表中节点的个数 */ private int size; public SingleLinkedList() { } public SingleLinkedList(int size) { this.size = size; } public int size(){ return this.size; } /** * 在链表尾部添加元素 * @param element */ public void add(Object element){ //把需要添加的数据封装成对象 Node node = new Node(element); //处理单链表为空的情况 if (headNode == null){ //把node节点设置成单链表的首节点 headNode = node; //把node设置成单链表的尾结点 lastNode = node; }else {//处理单链表不为空的情况 //让lastNode指向node节点 lastNode.next = node; //更新lastNode的值 lastNode = node; } //更新size的值 size ++; } /** * 根据序号获取元素的值 */ public Object get(int index){ //判断序号是否合法 if (index < 0 || index >= size) throw new IndexOutOfBoundsException("序号不合法,index:"+ index); //根据序号获取对应的节点对象 Node node = node(index); //获取并返回node节点的数据值 return node.data; } /** * 根据序号删除元素 * @param index */ public void remove(int index){ //判断序号是否合法 if (index < 0 || index >= size) throw new IndexOutOfBoundsException("序号不合法,index:"+ index); //处理删除节点在开头的情况 if (index == 0){ //获得删除节点的后一个节点 Node nextNode = headNode.next; //设置headNode的next值为null headNode.next = null; //设置设置nextNode为单链表的首节点 headNode = nextNode; } //处理删除节点在结尾的情况 else if (index == size - 1){ //获得删除节点的前一个节点 Node preNode = node(index - 1); //设置preNode的next为null preNode.next = null; //设置preNode为单链表的尾结点 lastNode = preNode; } //删除节点在中间的情况 else { //获得index-1所对应的节点对象 Node preNode = node(index - 1); //获得index+1所对应的节点对象 Node nexNode = preNode.next.next; //获得删除节点,并设值为null preNode.next.next = null; //设置preNode的next值为nexNode preNode.next = nexNode; } //更新size的值 size --; } /** * 根据序号插入元素 * @param index * @param element */ public void add(int index, Object element){ //判断序号是否合法 if (index < 0 index > size) throw new IndexOutOfBoundsException("序号不合法,index:" + index); //把需要添加的数据封装对象 Node node = new Node(element); //处理插入节点在开头的情况 if (index == 0){ //设置node节点的next为headNode node.next = headNode; //设置node为单链表的首节点 headNode = node; } //处理插入节点在末尾的情况 else if (index == size - 1){ //设置lastNode的next为node lastNode.next = node; //设置node为单链表尾结点 lastNode = node; } //处理插入节点在中间的情况 else { //获得index-1所对应的的节点对象 Node preNode = node(index - 1); //获得index所对应的节点对象 Node curNode = preNode.next; //设置preNode的next为node preNode.next = node; //设置node的next为curNode node.next = curNode; } //更新size的值 size ++; } /** * 根据序号获取对应节点对象 * @param index * @return */ private Node node(int index){ //定义一个临时节点 Node tempNode = headNode; //定义一个循环,用于获取index对应的节点对象 for (int i = 0; i < index; i++) { //更新tempNode的值 tempNode = tempNode.next; } return tempNode; } /** * 节点类 */ private static class Node{ /** * 用于保存节点中的数据 */ private Object data; /** * 用于保存指向下一个节点的地址值 */ private Node next; /** * 构造方法 * @param data */ public Node(Object data) { this.data = data; } }}

测试类

package day03;/** * @Author yqq * @Date 2022/05/05 12:07 * @Version 1.0 */public class Test01 { public static void main(String[] args) { SingleLinkedList list = new SingleLinkedList(); list.add("11"); list.add("22"); list.add("33"); list.add("44"); list.add("55"); //System.out.println(list); //根据序号获取单链表中元素// System.out.println(list.get(2)); //根据序号删除元素// list.remove(4); //根据序号添加元素 list.add(4,5); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Flink 集群基本架构
下一篇:SpringDataES查询方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~