一,Node节点:

/**
* 存储元素基本单位
*/
public class Node {
Object data;
Node pre;
Node next; public Node(Node pre, Object data, Node next) {
this.data = data;
this.pre = pre;
this.next = next;
}
}

二.自己实现一个链表

public class MyLinkedList {
private Node first;
private Node last;
private int size;
public boolean isEmpty(){
return size==0;
}
public int size(){
return size;
}
public boolean addBy(Object data){
Node l=last;
Node entry=new Node(l,data,null);
last=entry;
if(l==null){
first=entry;
}else {
l.next=entry;
}
size++;
return true;
} /**
* 根据下标获取Node元素
* 采用了二分查找法
* @param index
* @return
*/
private Node node(int index){
if(index<(size>>1)){
//下标在前半段,从前往后查
Node current=first;
for(int i=0;i<index;i++){
current=current.next;
}
return current;
}else {
//下标在后半段,从后往前查
Node current=last;
for (int i=size-1;i>index;i--){
current=current.pre;
}
return current;
}
} /**
* 判断下标是否越界
* @param index
*/
private void checkRange(int index){
if(index>=size||index<0){
throw new IndexOutOfBoundsException("下标越界");
}
} /**
* 根据下标获取元素
* @param index
* @return
*/
public Object get(int index){
checkRange(index);
return node(index).data;
}
private Object deleteNode(int index){
Node node=node(index);
Object data=node.data;
Node preNode=node.pre;
Node nextNode=node.next;
if(preNode==null){
//删除了第一个元素
first=nextNode;
}else {
preNode.next=nextNode;
node.next=null;
}
if(nextNode==null){
//删除了最后一个元素
last=preNode;
}else {
nextNode.pre=preNode;
node.pre=null;
}
size--;
node.data=null;
return data;
}
public Object remove(int index){
checkRange(index);
return deleteNode(index);
}
private void addBefore(Object data,Node specificNode){
Node preNode=specificNode.pre;
Node newNode=new Node(preNode,data,specificNode);
if(preNode==null) {
first=newNode;
}else {
preNode.next=newNode;
}
specificNode.pre=newNode;
size++;
}
public void add(int index,Object data){
checkRange(index);
if(index==size){
addBy(data);
}else {
Node node=node(index);
addBefore(data,node);
}
} }

我的集合学习笔记--LinkedList的更多相关文章

  1. Java集合学习笔记

      在Java中,我们经常听到Collections框架.Collection类以及Collections类.这三者名字相似,但是从概念上讲却是不同的.Collections框架泛指Java中用于存储 ...

  2. java 集合学习笔记

    1.Collection(单列结合) List(有序,数据可重复) ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高. Vector:底层数据结构是数组,查询快,增删慢,线程 ...

  3. JDK源码学习笔记——LinkedList

    一.类定义 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E& ...

  4. python --->字典 集合 学习笔记

    1.字典--->创建空字典:dict={} broa=["李宁",”耐克“,“阿迪达斯”,“鱼c工作室”] sloga=[“A”,“B”,“C”,“D”] dict={&qu ...

  5. python之 集合 学习笔记

    """ 集合内的元素是无序的,集合内的元素必须是可哈希的集合内元素的唯一的,不存在重复列表和字典不能存在集合里面,因为列表字典可变 可哈希集合也是不可哈希的 unhash ...

  6. 我的集合学习笔记--ArrayList

    一,ArrayList 实现自己的ArrayList:主要是添加方法,理解自动扩容机制 代码+注释 package com.amazing.jdk.learn2List.list_08_13; /** ...

  7. [Java] LinkedList / Queue - 源代码学习笔记

    简单地画了下 LinkedList 的继承关系,如下图.只是画了关注的部分,并不是完整的关系图.本博文涉及的是 Queue, Deque, LinkedList 的源代码阅读笔记.关于 List 接口 ...

  8. Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

    横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...

  9. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

随机推荐

  1. springboot整合redisson分布式锁

    一.通过maven引入redisson的jar包 <dependency> <groupId>org.redisson</groupId> <artifact ...

  2. 2080 特殊的质数肋骨 USACO (深度优先搜索)

    农民约翰的母牛总是产生最好的肋骨. 你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个 ...

  3. Laravel小项目之第4节 Laravel-通过表单实现新增及操作状态提示功能

    第4节 Laravel-通过表单实现新增及操作状态提示功能 4.1 显示新增表单视图 4.2 通过模型实现新增 4.3 操作状态提示 4.1 显示新增表单视图 修改边栏的链接 \resources\v ...

  4. python 上传百度语音识别+文字返回结果

    1文字生成语音 #!/usr/bin/python3 import urllib.request import requests#导入requests库 import urllib import js ...

  5. .NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别

    前段时日微软(Microsoft)正式发布了.NET Core 2.0,在很多开发社区中反响不错.但还是有一些开发者发出了疑问,.NET Core.Xamarin..NET Standard和.NET ...

  6. mascara-2(MetaMask/mascara本地实现)-连接线上钱包

    https://github.com/MetaMask/mascara (beta) Add MetaMask to your dapp even if the user doesn't have t ...

  7. <数据结构与算法分析>读书笔记--运行时间中的对数及其分析结果的准确性

    分析算法最混乱的方面大概集中在对数上面.我们已经看到,某些分治算法将以O(N log N)时间运行.此外,对数最常出现的规律可概括为下列一般法则: 如果一个算法用常数时间(O(1))将问题的大小削减为 ...

  8. 一加将在欧洲推出第一款商用 5G 手机

    远在太平洋中部的夏威夷群岛,高通举办了骁龙峰会. 峰会的惯例,各行业的合作伙伴都被邀请上台演讲.中国企业里,去年来的是小米雷军,而今年刚开场,一加手机 CEO 刘作虎就现身了. 与以往一样,张老板身着 ...

  9. PAT A1010 Radix (25 分)——进制转换,二分法

    Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...

  10. linux安装sonar

    第一步 使用上一篇博客中下载的sonar6.7.6上传到centos7 准备 安装jdk1.8 解压unzip sonarqube-6.7.6.zip 由于elasticsearch需要非root用户 ...