java链表list_java自定义List链表
第一步:定义一个List接口,规定一些基本操作
package my.stack;
public class Node {
private T data;
private Node next;
public Node(){
data = null;
next = null;
}
public Node(T data){
this.data = data;
this.next = null;
}
public Node(T data, Node next){
this.data = data;
this.next = next;
}
public void setData(T data){
this.data = data;
}
public T getData(){
return this.data;
}
public void setNext(Node next){
this.next = next;
}
public Node getNext(){
return this.next;
}
}
第二步:实现该接口定义的函数
1)由于是链表,首先要定义一个节点类(可以作为内部类实现)
package my.list;
public class Node {
private T data;
private Node next;
public Node(){
data = null;
next = null;
}
public Node(T data){
this.data = data;
this.next = null;
}
public Node(T data, Node next){
this.data = data;
this.next = next;
}
public void setData(T data){
this.data = data;
}
public T getData(){
return this.data;
}
public void setNext(Node next){
this.next = next;
}
public Node getNext(){
return this.next;
}
}
2)实现接口
package my.list;
public class MyLinkedList implements MyList {
private Node head;
private Node tail;
private int size;
public MyLinkedList(){
this.head = null;
this.tail = null;
this.size = 0;
}
public MyLinkedList(T data){
this.head = new Node(data);
this.tail = null;
this.size = 0;
}
@Override
//添加元素
public void add(T element) {
Node node = new Node(element);
if(this.head == null){
this.head = node;
this.tail = node;
}else{
this.tail.setNext(node);
this.tail = node;
}
this.size++;
}
@Override
//清空链表
public void clear() {
this.head = null;
this.tail = null;
System.gc();
}
@Override
//删除链表最后一个节点
public int delete() {
Node point = head;
while(point.getNext() != this.tail){
point = point.getNext();
}
tail.setNext(null);
tail = point;
size--;
return 0;
}
@Override
public boolean delete(int location) {
if(location > size-1){
System.out.println("out of range");
}else{
Node point = head;
int count = 1;
while(point.getNext() != this.tail){
point = point.getNext();
count++;
if(count == location){
System.out.println("finl this element:"+point.getData());
}
break;
//Node temp = point.getNext();
//point.setData(temp.getData());
//point.setNext(temp.getNext());
//temp = null;
}
Node temp = point.getNext();
point.setData(temp.getData());
point.setNext(temp.getNext());
temp = null;
return true;
}
return false;
}
@Override
//查找链表中是否包含某元素
public boolean find(T element) {
// TODO Auto-generated method stub
Node point = head;
while(point.getNext() != null){
if(point.getData().equals(element)){
return true;
}
point = point.getNext();
}
return false;
}
@Override
public int size() {
return this.size;
}
}
第三部:编写客户端进行测试
此处暂未实现使用location位置进行查询,链表随即查询效率较低
package my.list;
public class MyLinkedListClient {
public static void main(String[] args){
//System.out.println("hello world");
//Node node = new Node("hello");
//MyLinkedList> list = new MyLinkedList>();
MyLinkedList list = new MyLinkedList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
//list.delete();
System.out.println(list.size());
//System.out.println(list.delete(2));
//list.clear();
//list.clear();
}
}
java链表list_java自定义List链表相关推荐
- JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...
- Java单链表、双端链表、有序链表实现
Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插 ...
- 数据结构之链表及其Java实现_数据结构之链表及其Java实现
数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...
- Java数据结构和算法(四)--链表
日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...
- java数组转换成单链表_【转】单向链表(单链表)的Java实现
最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因 ...
- Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)
Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...
- Java版数据结构之单向链表
Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...
- Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...
- java数据结构 第4章-链表(双向链表)
文章目录 4.4 双向链表应用实例 4.4.1双向链表的操作分析和实现 1.管理单向链表的缺点分析: 2.分析 双向链表的遍历,添加,修改,删除的操作思路 3.双向链表的代码实现 4.代码运行结果 4 ...
最新文章
- 复杂系统设计 企业开发的困境
- Android实例开发中如何创建第一个项目(android studio)
- 并行计算与分布式计算
- 重装MS SQL Server 2000前必须彻底删除原安装文件!
- Qt 2D绘图功能简单总结
- Java中的日期操作
- 多所高校通知:暂缓返校
- Oscache 概述
- 网络蜘蛛爬取邮箱地址
- spss可以关键词词频分析吗_有什么自动分词做词频分析的工具?
- Vue脚手架H5公众号微信登陆问题及解决方式
- 用html制作的旅游相册名字唯美,好听的相册名字
- win7旗舰版配置FTP- 添加用户
- C++中的delete——读书笔记
- 多人连线的枪战游戏-补充
- vs2013 番茄助手Visual AssistX插件的安装与使用
- 帆软填报-根据角色/权限设置校验规则(含开关配置表校验)
- 列表页面的展开以及收起
- 爬取美女图片【绝对福利】
- 在线帮助文档的6大最佳创建方法,让用户更轻松的了解企业产品