代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
Java 实现单链表
作者:
空云万里晴
/ 发布于
2012/11/26
/
931
package com.llist; public interface LList<T> { boolean isEmpty(); // 判断线性表是否为空 int length(); // 返回线性表长度 T get(int i); // 返回第i(i>0)个元素 void set(int i,T x); // 设置第i个元素的值为x void insert(int i,T x); // 插入x作为第i个元素 void append(T x); // 在线性表最后插入x元素 T remove(int i); // 删除第i个元素并返回被删对象 void removeAll(); // 删除线性表所有元素 int Search(T key); // 查找,返回首次出现关键子为key的元素序号 } package com.llist; public class Node<T> { public T data; // 数据域,保存数据元素 public Node<T> next; // 地址域,保存后继结点 public Node(){ } public Node(T data,Node<T> next){ this.data = data; this.next = next; } } package com.llist; public class SingleLinkList<T> implements LList<T> { protected Node<T> head; // 头指针,指向单链表的头结点 // 默认构造方法,构造空单链表 public SingleLinkList(){ head = new Node<T>(); } // 由指定数组中的多个对象构造单链表,采用尾查构造单链表 public SingleLinkList(T[] element){ this(); Node<T> rear = this.head; for(int i=0;i<element.length;i++){ rear.next = new Node<T>(element[i],null); rear = rear.next; } } // 判断链表是否为空 public boolean isEmpty() { return this.head.next==null; } // 返回链表的长度 public int length() { int count = 0; Node<T> p = this.head.next; while(p!=null){ count++; p = p.next; } return count; } // 返回第i(i>0)个元素,若i的指定序号无效,则返回null public T get(int i) { if(i<=0||i>this.length()){ return null; } else{ Node<T> p = this.head; for(int j=0;j<i;j++){ p = p.next; } return p.data; } } // 设置第i(i>0)个元素的值为x,若i指定序号无效,则抛出序号越界异常 public void set(int i, T x) { if(x==null) return; if(i<=0||i>this.length()){ // 抛出序号越界异常 throw new IndexOutOfBoundsException("指定序号i="+i+"越界!"); } else{ Node<T> p = this.head; for(int j=0;j<i;j++){ p = p.next; } p.data = x; } } // 链表的插入操作 public void insert(int i, T x) { if(x==null) // 插入对象不能为空 return; if(i==0){ // 插在头结点之后 head.next = new Node<T>(x,this.head.next); } else if(i>0&&i<=this.length()){ Node<T> p = this.head; // 寻找插入位置 for(int j=0;j<i;j++){ p = p.next; } // 插入x作为p结点的后继结点 p.next = new Node<T>(x,p.next); } else{ // 抛出序号越界异常 throw new IndexOutOfBoundsException("指定序号i="+i+"越界!"); } } // 在单链表的最后添加对象 public void append(T x) { insert(this.length(),x); } // 删除序号为i的结点,操作成功返回给对象,否则返回null public T remove(int i) { if(i<=0||i>this.length()){ return null; } else{ Node<T> p = this.head; // 定位到待删除结点(i)的前驱结点(i-1) for(int j=0;j<i-1;j++){ p = p.next; } T old = p.next.data; p.next = p.next.next; return old; } } // 删除单链表的所有元素 public void removeAll() { this.head.next = null; } // 查找,返回首次出现关键子key的元素的序号 public int Search(T key) { if(key==null) return 0; else{ int i = 0; Node<T> p = this.head; while(p.next!=null){ i++; p = p.next; if(p.data.equals(key)) break; } if(p.next==null) return 0; else return i; } } //返回链表的所有元素的描述字符串,覆盖Object类的toString()方法 public String toString(){ String str = " ( "; Node<T> p = this.head.next; while(p!=null){ str += p.data.toString(); p = p.next; if(p!=null) str += ","; } str += " ) "; return str; } }
试试其它关键字
单链表
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
空云万里晴
贡献的其它代码
(
5
)
.
定时关机
.
Java 实现单链表
.
银行家算法模拟资源分配
.
复数运算
.
数组合并
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3