一:节点类(Node.java)

package cn.ZiJiCollection;public class Node {//每个节点包含三个内容Node previous;Node next;Object element;public Node(Node previous, Node next, Object element) {super();this.previous = previous;this.next = next;this.element = element;}public Node(Object element) {super();this.element = element;}}

二:SxtLinkedList.java

package cn.ZiJiCollection;public class SxtLinkedList<E> {//定义初始节点private Node first;private Node last;private int size;public void add(E element) {//建立节点nodeNode node = new Node(element);//判断初始节点为空,为空则建立节点if(first==null) {first=node;last=node;}else {//节点:{first last node}//开始情况node.previous=last;node.next=null;//last后移,node变成新的lastlast.next=node;last=node;}size++;}//打印
public String toString() {StringBuilder str=new StringBuilder("[");Node temp=first;while(temp!=null) {str.append(temp.element+",");temp=temp.next;}//将最后的逗号替换成“】”str.setCharAt(str.length()-1, ']');return str.toString();
}public void remove(int index) {SuoYingHeLi(index);Node temp=findNode(index);Node up=temp.previous;Node down=temp.next;if(up!=null) {//判断是否为空up.next=down;}if(down!=null) {down.previous=up;}if(index==0) {//删第一个first=down;}if(index==size-1) {//删最后一个last=up;}size--;
}//查找指定位置元素
public E get(int index) {SuoYingHeLi(index);Node temp=findNode(index);return temp!=null?(E)temp.element:null;
}//判断索引是否合理进行封装
private void SuoYingHeLi(int index) {if(index<0||index>size) {throw new RuntimeException("索引不合法!");}
}//查找节点
public Node findNode(int index) {SuoYingHeLi(index);//合理,提高查找效率(二分法)Node temp=null;if(index<=(size>>1)) {//size>>1相当于除于2temp=first;for(int i=0;i<index;i++) {temp=temp.next;}}else {temp=last;for(int j=(size-1);j>index;j--) {temp=temp.previous;}}return temp;
}//添加节点
public void add(int index,E element) {SuoYingHeLi(index);Node newNode=new Node(element);Node temp=findNode(index) ;if(temp!=null) {Node up=temp.previous;up.next=newNode;newNode.previous=up;temp.previous=newNode;newNode.next=temp;}if(index==0) {first.previous=newNode;newNode.next=first;first=newNode;}if(index==size-1) {last.next=newNode; newNode.previous=last;last=newNode;}
}public static void main(String[] args) {SxtLinkedList<String> list=new SxtLinkedList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");System.out.println(list);System.out.println(list.get(4));list.remove(4);System.out.println(list);list.add(3, "唐");System.out.println(list);
}
}

三:画图解释


四:结果显示

[a,b,c,d,e,f]
e
[a,b,c,d,f]
[a,b,c,唐,d,f]

五:待完善之处

在增加节点add(int index,E element) 方法时,如果在0处添加数据,会抛出异常

链表LinkedList的Java实现相关推荐

  1. Java链表—— LinkedList

    ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低. 链表LinkedList和动态数组ArrayList 以下情况使用 ArrayList : 频 ...

  2. java链表的数据结构_Java数据结构 获取链表(LinkedList)的第一个和最后一个元素

    Java数据结构 获取链表(LinkedList)的第一个和最后一个元素 以下实例演示了如何使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlis ...

  3. Java 数据结构(链表LinkedList增删改查、数组Vector、获取Vector最大值、交换Vector两成员位置、栈的实现、压栈出栈实现反转、队列Queue)

    在链表(LinkedList)的开头和结尾添加元素 import java.util.LinkedList;public class Main {public static void main(Str ...

  4. 用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue

    一,用结点实现链表LinkedList,不用换JavaAPI的集合框架 import java.util.Scanner;public class Main {public static class ...

  5. 4.链表LinkedList

    链表LinkedList 链表简介 链表是有序的列表,它在内存中的存储 小结: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 如图:发现链表的各个 ...

  6. LeetCode 147. Insertion Sort List 链表插入排序 C++/Java

    LeetCode 147. Insertion Sort List 链表插入排序 C++/Java Sort a linked list using insertion sort. A graphic ...

  7. 3 链表(LinkedList)

    3 链表(LinkedList) 3.1 链表介绍 链表是以节点的方式来存储数据的 每一个节点包含data域和next域,next域存储的是下一个节点的内存地址 链表的各个节点在内存中并不一定是连续存 ...

  8. 链表用java实现简单单链表linkedlist

    链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 每个结点包括两个部分: 1是存储数据元素的数据域data 2是存储下一个结点地址的指针域p. 相 ...

  9. C++ 十字链表图转java版

    C++ 图 #include <iostream> #include <string> #include <queue> #include <stack> ...

最新文章

  1. getRotationMatrix2D 函数
  2. JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
  3. Linux(CentOS7.0)下 C访问MySQL (转)
  4. 切割图形_重庆Q3245R锅炉板加工几何图形2021新闻
  5. python一行没写完用什么隔离_在CherryPy中请求隔离是如何工作的。我不明白基本的想法...
  6. linux搭建环境经验,经验总结54--搭建linux虚拟机环境
  7. 我丢,去面试初级Java开发岗位,被问到泛型?
  8. python记忆式键入_Python基础
  9. gnu2和gnu3区别_GNU,生日快乐:为什么35年后我仍然爱GNU
  10. c++ tcp 服务器和客户端例子
  11. 集合类接口和类层次关系图
  12. RINEX3.05格式中的主要更新
  13. 简支梁挠度计算公式推导_挠度公式推导与计算
  14. C 语言中 scanf() 的用法
  15. 由内而外全面造就自己(三)
  16. Simulink自动代码生成5——控制函数原型(control function prototype)
  17. 4-VIV-Android之PopupWindow
  18. Matlab求解定积分/不定积分/微分
  19. c语言创建写入和读取TXT文件数据
  20. 计算机电源的正确使用,终于懂得电脑电源保养方法

热门文章

  1. BZOJ 4006 Luogu P3264 [JLOI2015]管道连接 (斯坦纳树、状压DP)
  2. yy神曲url解析php_使用PHP来简单的创建一个RPC服务
  3. 遇到 ORACLE 错误 1115,ORA-01114、ORA-27067错误案例一则
  4. Java面试集合(二)
  5. SQLSERVER 2014 SP1 的服务器 日志文件无法收缩的处理
  6. yii2 basic版 MVC 部分
  7. ASP.NET Core 源码阅读笔记(5) ---Microsoft.AspNetCore.Routing路由
  8. mysql权限与安全
  9. Atitit。Web server Jetty9 使用 attilax 总结
  10. 字符数组、字节数组、字符串转换