0

0

java中单链表的介绍以及用法

零下一度

零下一度

发布时间:2017-06-25 10:28:03

|

2196人浏览过

|

来源于php中文网

原创

单链表:
* 1.链表可以是一种有序或无序的列表
* 2.链表的内容通常存储在内存中分散的为止
* 3.链表由节点组成,每一个节点具有相同的结构
* 4.节点分为数据域和链域,数据域存放节点内容,链域存放下一个节点的指针

 

package myLinkList;

public class MyLinkedList {

/**
*Node:节点对象
* 包括数据域data和链域next(指向下一个节点对象)
*/
class Node {
  private T data;
  private Node next;
  public Node(){

  }
  //节点初始化
  public Node(T data,Node next){
    this.data = data;
    this.next = next;
  }
}

private Node header;//链表头节点
private Node tailer;//链表尾节点
private int size;//链表长度(节点个数)


/**
* 链表初始化
*/
public MyLinkedList() {//空参构造
  header = null;
  tailer = null;
}
public MyLinkedList(T data) {//有参构造
  header = new Node(data,null);//创建头结点
  tailer = header;
  size++;
}

/**
 * 求链表长度
 * @return
 */
public int getSize() {
  return size;
}

/**
 * 返回索引为index的节点的数据
 * @param index 索引
 * @return
 */
public T get(int index) {
  if(index size-1)
    throw new IndexOutOfBoundsException("索引越界");
  return getIndexNode(index).data;
}

public Node getIndexNode(int index){
  if(index size-1)
    throw new IndexOutOfBoundsException("索引越界");
  Node current = header;
  for(int i = 0;i       if(i == index) {
    return current;
  }
  current = current.next;
}
  return null;
}

/**
* 返回element在在链表位置,如果不存在,则返回-1
* @param tdata
* @return
*/
public int getIndex(T element) {
  if(element == null)
    return -1;
  Node current = header;
  for(int i = 0; i     if(current.data == element){
    return i;
  }
  current = current.next;
}
  return -1;
}



/**
* 在链表末端添加element
* @param element
*/
public void add(T element) {
  Node n = new Node(element,null);
  if(header == null){
  header = n;
  tailer = header;
}else{
  tailer.next = n;
  tailer = n;
}
  size++;
}

/**
* 在链表头部添加element
* @param element
*/
public void addAtheader(T element) {
  header = new Node(element,header);
  if(tailer == null){
    tailer = header;
  }
  size++;
}

/**
* 在index位置后边插入元素
* @param index
* @param element
*/
public void insert(int index,T element) {
  if(indexsize-1) {
    throw new IndexOutOfBoundsException("索引越界");
  }
  if(header==null){
    add(element);
  }else{
    if(index==0){
    addAtheader(element);
  }else{
      Node current = getIndexNode(index);
      Node insertNode = new Node(element,current.next);
      current.next = insertNode;
      size++;
    }
  }
}
/**
* 删除任意位置的节点
* @param index
* @return
*/
public T deleteNode(int index){
  if(indexsize-1)
    throw new IndexOutOfBoundsException("索引越界");
  if(index == 0){//在头部删除元素
    Node n = header;//记录头节点
    header = header.next;//将头指针指向下一个节点
    size--;
    return n.data;//输出记录节点的内容
  }else{//在其他位置删除
    Node current = getIndexNode(index);//获取当前节点
    Node pre = getIndexNode(index-1);//获取前一个节点
    pre.next = current.next;//将前一个节点的链域设为null
    size--;
    return current.data;//返回删除节点的数据域
  }


}
/**
* 删除头节点
* @return
*/
public T deleteHeader(){
  return deleteNode(0);
}
/**
* 删除尾节点
* @return
*/
public T deleteTailer(){
return deleteNode(size-1);
}

//清空节点
public void clear(){
  header = null;
  tailer = null;
  size = 0;
}

/**
* toString();
*/
public String toString(){
  if(size == 0)
    return "[]";
  Node current = header;
  StringBuilder sb = new StringBuilder();
  sb.append("[");
  while(current.next != null) {
    sb.append(current.data).append("  ");
    current = current.next;
  }
  sb.append(current.data).append("]");
  return sb.toString();
}


public static void main(String[] args) {
  MyLinkedList link = new MyLinkedList();
  link.add("header");
  link.add("11");
  link.add("22");
  link.add("33");
  link.addAtheader("newheader");
  link.insert(2, "1.5");;

  System.out.println(link.getIndex("11"));
  System.out.println(link.getIndex("88"));
  System.out.println(link.get(0));
  System.out.println(link.getSize());
  System.out.println(link.deleteHeader());
  System.out.println(link.deleteTailer());
  System.out.println(link.deleteNode(1));
  System.out.println(link);
  link.clear();
  System.out.println(link);

  }

企业后台管理系统JaManage2.0 多语言版
企业后台管理系统JaManage2.0 多语言版

功能介绍: 一.系统管理:管理员管理,可以新增管理员及修改管理员密码;数据库备份,为保证您的数据安全本系统采用了数据库备份功能;上传文件管理,管理你增加产品时上传的图片及其他文件 二.企业信息:可设置修改企业的各类信息及介绍 三.产品管理:产品类别新增修改管理,产品添加修改以及产品的审核 四.下载中心:可分类增加各种文件,如驱动和技术文档等文件的下载 五.订单管理:查看订单的详细信息

下载

}

立即学习Java免费学习笔记(深入)”;

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

129

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

77

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

81

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

60

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

444

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

15

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.2万人学习

C# 教程
C# 教程

共94课时 | 5.8万人学习

Java 教程
Java 教程

共578课时 | 40.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号