自己实现的LinkedList
来源:互联网 发布:gps pf11导航仪端口 编辑:程序博客网 时间:2024/05/22 15:03
package MyLinkedList;import java.util.LinkedList;/** * Created by LENOVO on 2017/7/1. */public class MyLinkedList<Object> { private int size; private Node head; private Node last; //获得链表长度 public int size(){ return size; } //判断是否为空 public boolean isEmpty(){ return size()==0; } //链表末尾添加 public void add(Object object){ linkLast(object); size++; } //通过位置判断如何添加 public void add(int index, Object obj){ if(index == size){ linkLast(obj); }else{ linkBefore(obj, getNode(index)); } size++; } //删除某节点 public void remove(int index){ unlink(getNode(index - 1)); size--; } //获得index位置的值 public java.lang.Object get(int index){ return getNode(index).object; } //设置某修改位置的值 public void set(int index, Object object){ Node node = getNode(index - 1); node.object = object; } //若index等于size,则说明是从链表尾部插入 private void linkLast(Object obj){// if(head == null){// 0 1 2 3 4// } Node oldNode = last; Node newNode = new Node(obj, last, null); last = newNode; if(oldNode == null){ head = newNode; }else{ oldNode.next = newNode; } } //若index小与size,则说明是从链表中插入 0 1 2 3 4 private void linkBefore(Object obj,Node oldNode){ Node prevNode = oldNode.prev; Node newNode = new Node(obj, prevNode,prevNode.next); prevNode.next = newNode; } //断开指定节点的连接(删除某节点) private void unlink(Node node){ Node prev = node.prev; Node next = node.next; prev.next = next; next.prev = prev; } //因为是双向链表,所以判断是从头查找还是从尾查找 private Node getNode(int index){ if(index < 0 || index > size + 1){ throw new RuntimeException("越界!"); } if(size / 2 <= index){ Node h = head; for(int i = 0;i<index;i++){ h = h.next; } return h; }else{ Node l = last; for(int i = size - 1; i > index; i--){ l = l.prev; } return l; } } //Node是内部类 private static class Node { private java.lang.Object object; private Node prev; private Node next; public Node() { } public Node(java.lang.Object obj, Node prev, Node next) { this.object = obj; this.prev = prev; this.next = next; } } public static void main(String[] args) { MyLinkedList<Integer> myLinkedList = new MyLinkedList<Integer>(); for (int i = 0; i < 10; i++) { myLinkedList.add(i); } for (int i = 0; i < 10; i++) { System.out.println(myLinkedList.get(i)); } }}
阅读全文
1 0
- 实现自己的LinkedList
- 自己实现的LinkedList
- java自己实现的linkedlist
- 用LinkedList实现自己的Stack
- 【java集合】自己实现简易的LinkedList
- 自己实现LinkedList
- 自己实现LinkedList底层
- JAVA--自己实现LinkedList
- 编写自己的LinkedList
- 自己实现单向链表讨论一下LinkedList的效率
- java8集合框架LinkedList类实现自己简单的理解
- Java之实现自己的ArrayList与LinkedList
- 使用LinkedList作为基层实现,定义自己的TreeSet
- 自己实现Java中基于双向链表的LinkedList
- 自己写的一个linkedList
- 自己写简单的LinkedList
- 自己实现LinkedList集合add,get,remove
- 自己实现链表数据结构 LinkedList
- 数据结构之栈
- 查看和修改Mysql数据库建表的时候默认的存储引擎
- 矩阵乘法
- 1042 数字0-9的数量【数位dp】
- 微信小程序地图划线
- 自己实现的LinkedList
- git 游离状态的解决办法
- CV520直接pin对pin替换 MS520,直接替换,无需修改硬件以及软件
- java面向对象基础
- FPGA学习笔记之流水灯(1)
- [Sklearn应用6] Feature Selection 特征选择(二)
- JavaScript的隐式类型转换浅析
- Linux内核移植和根文件系统制作(详细步骤精讲)
- 《剑指offer》旋转数组的最小数字