package linearList;
//单链表结点类实现
public class SingleListDemo1Node<T> {
public T data; //声明数据域
public SingleListDemo1Node<T> next; //声明地址域
public SingleListDemo1Node(T data,SingleListDemo1Node<T> next){
//构造结点,data指定数据元素,next指定后继结点
this.data = data;
this.next = next;
}
//无参构造
public SingleListDemo1Node(){
this(null,null);
}
//返回结点域的描述字符串
public String toString(){
return this.data.toString();
}
}
单链表类
package linearList;
public class SingleListDemo1<T> extends Object{
//初始化一个结点
public SingleListDemo1Node<T> head;
//构造创建空单链表
public SingleListDemo1(){
this.head = new SingleListDemo1Node<T>(); //创建头部结点,data和next值都为空
}
//用values数组来填充单链表元素
public SingleListDemo1(T []values){
this(); //创建空单链表
SingleListDemo1Node<T> node = this.head; //结点node对象指向单链表最后一个结点
for (int i = 0; i < values.length; i++) {
node.next = new SingleListDemo1Node<T>(values[i],null); //从单链表的尾部插入,node指向新的单链表尾部
node = node.next;
}
}
//判断链表是否为空
public boolean isEmpty(){
return this.head.next==null;
}
//返回单链表长度
public int size(){
int len = 0;
SingleListDemo1Node<T> temp = this.head.next;
while(temp != null){
len ++;
temp = temp.next;
}
return len;
}
//返回第i个元素
public T get(int i){
SingleListDemo1Node<T> p = this.head.next;
for(int j = 0; p != null && j<i-1;j++){
p = p.next;
}
T t = (i>=0&&p!=null)?p.data:null;
return t;
}
//修改第i个元素的值为x
public void set(int i , T x){
SingleListDemo1Node<T> p = this.head.next;
int len = 0;
while(p != null){
len++;
if(len == i){
p.data = x;
break;
}
p = p.next;
}
}
//向指定位置i插入元素,若i<0,则将i插入在最前边
public SingleListDemo1Node<T> insert(int i,T x){
if(x == null){
throw new NullPointerException("x == null"); //如果x为空,抛出空对象异常
}
SingleListDemo1Node<T> p = this.head; //p指向头结点
//循环寻找第i-1个或最后一个结点
for(int j = 0 ;p.next!=null&&j<i-1; j++){
p = p.next;
}
p.next = new SingleListDemo1Node<T>(x,p.next);
return p.next;
}
//在单链表最后插入元素
public SingleListDemo1Node<T> insert(T x){
return insert(Integer.MAX_VALUE, x);
}
//如果把两个插入方法返回类型写为void,编译不出错
//删除操作
//删除单链表所有元素
public void clear(){
this.head.next = null;
}
//删除第i个元素
public T remove(int i){
SingleListDemo1Node<T> p = this.head;
for (int j = 0; p.next != null && j<i-1; j++) { //遍历寻找到第i-1个元素
p = p.next;
}
if( i>= 0&&p.next != null){ //删除
T old = p.next.data;
p.next = p.next.next;
return old;
}
return null; //如果i<0或i>表长
}
//返回单链表所有元素的描述字符串
public String ToString(){
String str = this.getClass().getName()+"("; //返回类名
for(SingleListDemo1Node<T> p = this.head.next; p != null ; p = p.next){
str = str+p.data.toString();
if(p.next != null){
str += ",";
}
}
return str + ")";
}
public static void main(String[] args) {
SingleListDemo1<Integer> l1 = new SingleListDemo1<Integer>(new Integer[]{1,2,4,5});
//依次添加方法测试
System.out.println(l1.ToString());
}
结点类package linearList;//单链表结点类实现public class SingleListDemo1Node<T> { public T data; //声明数据域 public SingleListDemo1Node<T> next; //声明地址域 public SingleListDemo1Node(T data...