美文网首页
单链表的基础实现

单链表的基础实现

作者: 这个太难了 | 来源:发表于2017-12-08 16:00 被阅读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
    
    

    相关文章

      网友评论

          本文标题:单链表的基础实现

          本文链接:https://www.haomeiwen.com/subject/ulweixtx.html