package SingleList;
public class Link {
/**
* 单向链表链节点
* @author
*/
// 链接点中包括两部分 一部分数数据项 一部分是指向下一个链接点的引用
public float data;//数据项
public Link next = null; //指向下一个链节点的引用
public Link(float data){
this.data= data;
}
@Override
public String toString() {
return "Link [data=" + data + "]";
}
}
package SingleList;
public class LinkList {
/**
* 单向链表的实现
* 链表就是由若干个链节点完成的,链表对象中必须有一个字段指向对第一个链接点的引用
*/
private Link first; // 指向第一个链节点
public LinkList(){
//完成对第一个节点的初始化
first = null;
}
//判断链表是否为空 如果不为空那么链表就不是空
public boolean isEmpty(){
return first == null;
}
//在链表的首部添加一个节点
public void insertFirst(float data){
Link link = new Link(data);
link.next=first; //使用头插法 添加节点
first = link;
}
//在链表的首部删除一个节点 返回被删除的节点
public Link deleteFirst(){
Link temp = first;
first = first.next;
return temp;
}
//在链表的尾部添加一个节点
public void insertTail(float data){
Link link = new Link(data);
if(first == null){
first = link;
return ;
}
Link current = first;
while(current.next!=null){
current = current.next;
}
current.next=link;
}
//在链表的尾部删除一个节点
public void deleteTail(){
Link current = first;
if(current == null){
return ;
}
if(current.next == null){
current = null;
return ;
}
while(current.next.next!=null){
current = current.next;
}
current.next= null;
}
//根据某个数据项查找某个链接点
public Link find(float key){
Link current = first;
while(current!=null&¤t.data!=key){
if(current.next==null){
return null;
}
current = current.next;
}
return current;
}
@Override
public String toString(){
StringBuffer sb = new StringBuffer();
Link current = first;
while(current!=null){
sb.append(current.data+" ");
current = current.next;
}
return sb.toString();
}
public static void main(String[] args) {
//测试代码
LinkList lk = new LinkList();
for(int i = 0;i<10;i++){
// lk.insertFirst(i);
lk.insertTail(i);
}
lk.deleteFirst();
lk.deleteTail();
System.out.println(lk.toString());
}
}