链表LinkedList的Java实现
一:节点类(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实现相关推荐
- Java链表—— LinkedList
ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低. 链表LinkedList和动态数组ArrayList 以下情况使用 ArrayList : 频 ...
- java链表的数据结构_Java数据结构 获取链表(LinkedList)的第一个和最后一个元素
Java数据结构 获取链表(LinkedList)的第一个和最后一个元素 以下实例演示了如何使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlis ...
- Java 数据结构(链表LinkedList增删改查、数组Vector、获取Vector最大值、交换Vector两成员位置、栈的实现、压栈出栈实现反转、队列Queue)
在链表(LinkedList)的开头和结尾添加元素 import java.util.LinkedList;public class Main {public static void main(Str ...
- 用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue
一,用结点实现链表LinkedList,不用换JavaAPI的集合框架 import java.util.Scanner;public class Main {public static class ...
- 4.链表LinkedList
链表LinkedList 链表简介 链表是有序的列表,它在内存中的存储 小结: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 如图:发现链表的各个 ...
- LeetCode 147. Insertion Sort List 链表插入排序 C++/Java
LeetCode 147. Insertion Sort List 链表插入排序 C++/Java Sort a linked list using insertion sort. A graphic ...
- 3 链表(LinkedList)
3 链表(LinkedList) 3.1 链表介绍 链表是以节点的方式来存储数据的 每一个节点包含data域和next域,next域存储的是下一个节点的内存地址 链表的各个节点在内存中并不一定是连续存 ...
- 链表用java实现简单单链表linkedlist
链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 每个结点包括两个部分: 1是存储数据元素的数据域data 2是存储下一个结点地址的指针域p. 相 ...
- C++ 十字链表图转java版
C++ 图 #include <iostream> #include <string> #include <queue> #include <stack> ...
最新文章
- getRotationMatrix2D 函数
- JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
- Linux(CentOS7.0)下 C访问MySQL (转)
- 切割图形_重庆Q3245R锅炉板加工几何图形2021新闻
- python一行没写完用什么隔离_在CherryPy中请求隔离是如何工作的。我不明白基本的想法...
- linux搭建环境经验,经验总结54--搭建linux虚拟机环境
- 我丢,去面试初级Java开发岗位,被问到泛型?
- python记忆式键入_Python基础
- gnu2和gnu3区别_GNU,生日快乐:为什么35年后我仍然爱GNU
- c++ tcp 服务器和客户端例子
- 集合类接口和类层次关系图
- RINEX3.05格式中的主要更新
- 简支梁挠度计算公式推导_挠度公式推导与计算
- C 语言中 scanf() 的用法
- 由内而外全面造就自己(三)
- Simulink自动代码生成5——控制函数原型(control function prototype)
- 4-VIV-Android之PopupWindow
- Matlab求解定积分/不定积分/微分
- c语言创建写入和读取TXT文件数据
- 计算机电源的正确使用,终于懂得电脑电源保养方法
热门文章
- BZOJ 4006 Luogu P3264 [JLOI2015]管道连接 (斯坦纳树、状压DP)
- yy神曲url解析php_使用PHP来简单的创建一个RPC服务
- 遇到 ORACLE 错误 1115,ORA-01114、ORA-27067错误案例一则
- Java面试集合(二)
- SQLSERVER 2014 SP1 的服务器 日志文件无法收缩的处理
- yii2 basic版 MVC 部分
- ASP.NET Core 源码阅读笔记(5) ---Microsoft.AspNetCore.Routing路由
- mysql权限与安全
- Atitit。Web server Jetty9 使用 attilax 总结
- 字符数组、字节数组、字符串转换