链表是一种递归的数据结构,它或者为空(null)或者是指向一个节点(node)的引用,
该节点含有一个泛型的元素和一个指向另一个链表的引用。
实现链表用的是嵌套类来做的
完整代码:
package lianbiao;
public class Lianbiao <Item>{
private Node first;//头节点
private Node last;//尾节点
private int N; //链表的元素个数,new时被默认初始化为0
private class Node{ //节点类
private Item item; //存放元素
Node next;//下一个节点域
}
public void add_Lb_head(Item item) { //表头插入元素
Node oldfirst = first;//保存指向链表的链接
first = new Node(); //创建新的头结点
first.item = item; //把要插入的节点值给新的节点,作为头结点
first.next = oldfirst; //新节点的下一节点域指向原来的节点(原来的节点后移)
N++; //链表的元素个数+1
}
public Item dlt_Lb_head() {//表头删除元素
while(first != null) { //当链表有节点的时候
Item item = first.item;//item存放第一个节点的值
first = first.next;//指向下一个节点
N--;//链表的元素个数-1
return item; //返回被删除的表头元素
}
return null;//链表没有节点时返回null
}
public void add_lb_tail(Item item) {//表尾添加节点
while(first.next != null) {//找到表尾(first.next=null)
first = first.next; //向后找
}
last = first;//last作为表尾节点
Node oldlast = last; //保存指向尾节点的链接
last = new Node();//创建新的尾节点
last.item = item;//把要插入的节点给新的尾节点last
oldlast.next = last;//将原尾节点的链接指向新节点last
N++;
}
public boolean isEmpty() {//判断链表是否为空
return first == null?true:false;
}
public void print() { //遍历打印链表
for(Node x = first; x != null; x = x.next) {
System.out.print(x.item + " ");
}
}
public int len() {//返回链表长度
return N;
}
/*------------测试用例--------------*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Lianbiao<String>L = new Lianbiao<String>();
L.add_Lb_head("Hello");
L.add_lb_tail("Java");
L.print();
System.out.println("\n--------------------");
System.out.println(L.len());
System.out.println(L.isEmpty());
System.out.println(L.dlt_Lb_head());
System.out.println(L.dlt_Lb_head());
System.out.println(L.dlt_Lb_head());
System.out.println(L.isEmpty());
}
}
输出的结果
Hello Java
--------------------
2
false
Hello
Java
null
true
网友评论