第一步:定义一个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链表相关推荐

  1. JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  2. Java单链表、双端链表、有序链表实现

    Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插 ...

  3. 数据结构之链表及其Java实现_数据结构之链表及其Java实现

    数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...

  4. Java数据结构和算法(四)--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  5. java数组转换成单链表_【转】单向链表(单链表)的Java实现

    最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因 ...

  6. Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)

    Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...

  7. Java版数据结构之单向链表

    Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...

  8. Leetcode算法Java全解答--19. 删除链表的倒数第N个节点

    Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...

  9. java数据结构 第4章-链表(双向链表)

    文章目录 4.4 双向链表应用实例 4.4.1双向链表的操作分析和实现 1.管理单向链表的缺点分析: 2.分析 双向链表的遍历,添加,修改,删除的操作思路 3.双向链表的代码实现 4.代码运行结果 4 ...

最新文章

  1. 复杂系统设计 企业开发的困境
  2. Android实例开发中如何创建第一个项目(android studio)
  3. 并行计算与分布式计算
  4. 重装MS SQL Server 2000前必须彻底删除原安装文件!
  5. Qt 2D绘图功能简单总结
  6. Java中的日期操作
  7. 多所高校通知:暂缓返校
  8. Oscache 概述
  9. 网络蜘蛛爬取邮箱地址
  10. spss可以关键词词频分析吗_有什么自动分词做词频分析的工具?
  11. Vue脚手架H5公众号微信登陆问题及解决方式
  12. 用html制作的旅游相册名字唯美,好听的相册名字
  13. win7旗舰版配置FTP- 添加用户
  14. C++中的delete——读书笔记
  15. 多人连线的枪战游戏-补充
  16. vs2013 番茄助手Visual AssistX插件的安装与使用
  17. 帆软填报-根据角色/权限设置校验规则(含开关配置表校验)
  18. 列表页面的展开以及收起
  19. 爬取美女图片【绝对福利】
  20. 在线帮助文档的6大最佳创建方法,让用户更轻松的了解企业产品

热门文章

  1. Android官方开发文档Training系列课程中文版:Android的安全建议
  2. k8s 基础概念和术语
  3. 函数:MySQL中字符串匹配函数LOCATE和POSITION使用方法
  4. 补鞋匠---Cobbler 服务器自动搭建
  5. Ubuntu安装Gems报错的解决办法
  6. 编程模式如何结束未响应的程序
  7. vbs创建目录,可循环创建父级目录
  8. 手把手教你实现Java发送邮件(1)-发送简单的文本
  9. linux的驱动开发——下载地址
  10. 流式处理和批处理的区别