java模拟LinkedList实现双链表,完成基本操作
来源:互联网 发布:数据库应用技术 编辑:程序博客网 时间:2024/06/10 15:04
代码:
import java.util.Arrays;import java.util.LinkedList;/** * 自定义的双向链表 * 完成CURD操作 * @author 莱格 */public class MyLinkedList { private Node first;// 头节点 private Node last;// 尾节点 private int size;// 容器大小 /** * 添加元素 */ public void add(Object obj) { Node n = new Node(); if (first == null) { n.setPrevious(null);// 将上一节点的保存上一节点信息的节点置为空 n.setObj(obj); n.setNext(null);// 设置下一节点的信息为null first = n;// 此时头节点尾结点都是它本身 last = n;// 此时头节点尾结点都是它本身 } else { n.setPrevious(last);// previous将保存上一节点的信息 n.setObj(obj);// 往对象中添加数据信息 n.setNext(null);// 设置尾节点的信息为空,此时无上一节点 last.setNext(n);// 节点信息保存作为尾结点 last = n; } size++; } /** * 返回节点的长度 */ public int size() { return size; } /** * 删除元素 思路: 删除指定索引的节点 将头节点的next指向尾节点 将尾节点的previous指向头节点 * LinkedList */ // LinkedList<E> public void remove(int index) { Node temp = node(index); if (temp != null) { if (index == 0) { } Node up = temp.previous;// 获取temp的上一节点 Node down = temp.next;// 获取当前节点的下一节点 up.next = down; down.previous = up; } size--; } /** * 在头节点添加一个元素 * */ public void addFirst(Object obj) { //Node temp = node(0); Node node = new Node(); node.setObj(obj); node.next = first; first.previous = node; node.previous = null; first = node; size++; } /** * 在尾节点添加一个元素 * */ public void addLast(Object obj) { Node node = new Node(); node.setObj(obj); node.previous = last; last.next = node; node = last; size++; } /** * 删除头节点 * */ public void removeFirst() { Node second = first.next; second.previous = null; first = second; size--; } /** * 删除尾结点 * */ public void removeLast() { Node nxt = last.previous; nxt.next = null; last.previous = null;//help gc last = nxt; size--; } /** * 在i节点处添加n节点 * * */ public void add(int index, Object obj) { checkIndex(index); Node temp = node(index); Node node = new Node(); node.setObj(obj); if (temp != null) { Node nxt = temp.next; node.previous = temp; temp.next = node; nxt.previous = node; node.next = nxt; } size++; } /** * 获取index索引处的值 * */ public Object get(int index) { checkIndex(index); Node temp = null; if (first != null) { temp = first; for (int i = 0; i < index; i++) { temp = temp.next; } } return temp.getObj(); } /** * 修改index处对应节点的信息 * */ public void update(int index,Object obj) { checkIndex(index); Node temp = node(index); if (temp != null) { temp.setObj(obj); } } /** * 索引检查 */ public void checkIndex(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("索引越界了"); } } /** * 返回指定索引的节点 * LinkedList * @param index * @return */ public Node node(int index) { checkIndex(index); Node temp = null; if (first != null) { temp = first; for (int i = 0; i < index; i++) { temp = temp.next; } } return temp; } /** * 将链表转换成数组 * */ public Object[] toArray() { Object[] obj = new Object[size]; for (int i = 0; i < size; i++) { obj[i] = get(i); } return obj; } /** * 将链表转换成字符数组输出 * */ public String toString() { return Arrays.toString(toArray()).replaceAll(" ", ""); } /** * 测试方法 * @param args */ public static void main(String[] args) { MyLinkedList m = new MyLinkedList(); m.add("aaa"); m.add("bbb"); m.add("ccc"); m.add("ddd"); m.add("eee"); m.add("fff"); m.add(123); m.removeLast(); System.out.println(m.size()); System.out.println(m.get(5)); System.out.println(m.toString()); }}
节点信息:
/** * 节点信息 *@author 莱格 */public class Node { /** * 保存上一个节点的信息 * */ Node previous; /** * 保存本节点的信息 * */ private Object obj; /** * 保存下一个节点 的信息 * */ Node next; public Node() { super(); } public Node(Node previous, Object obj, Node next) { super(); this.previous = previous; this.obj = obj; this.next = next; } public Node getPrevious() { return previous; } public void setPrevious(Node previous) { this.previous = previous; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; }}
阅读全文
1 0
- java模拟LinkedList实现双链表,完成基本操作
- LinkedList基本实现Java版
- 循环双链表之Java实现(模拟JDK中LinkedList)
- [Java]ArrayList与LinkedList的模拟实现
- java模拟hashMap实现(linkedList方式)
- 模拟linkedList添加操作
- linkedLIst基本方法操作
- LinkedList基本操作
- java LinkedList模拟堆栈
- Java语言使用泛型和LinkedList模拟栈操作
- Java集合框架:LinkedList基本应用(用LinkedList模拟堆栈或队列的数据结构)
- JAVA学习笔记30——模拟实现LinkedList
- java双向链接表LinkedList的编写模拟实现
- Java LinkedList基本用法
- Java LinkedList基本用法
- java LinkedList 基本用法
- Java LinkedList基本用法
- Java LinkedList基本用法
- IDEA 创建Maven Web项目
- 统计apk文件和jar包中的方法数
- 【编程练习】快速排序,Java和Python实现
- 消除内联元素的空隙
- 按钮:返回初始化页面
- java模拟LinkedList实现双链表,完成基本操作
- gulp详细入门教程
- Bomb! OpenJ_POJ
- [玩转算法]对撞指针
- OwnDesign
- 用pycaffe绘制训练过程的loss和accuracy曲线
- 欢场春梦破碎夜 A股暴跌哀鸿遍野 未来投资机会何在?
- PHP基础类型之浮点型
- 带你轻松搞定时间选择控件原理