单链表的基础实现

2017-12-08  本文已影响0人  这个太难了

链表是一种递归的数据结构,它或者为空(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

上一篇下一篇

猜你喜欢

热点阅读