zoukankan      html  css  js  c++  java
  • Java 实现简答的单链表的功能

    作者:林子木  博客网址:http://blog.csdn.net/wolinxuebin

    參考网址:http://blog.csdn.net/sunsaigang/article/details/5751780


    描写叙述:使用java实现简答的单链表的功能

    定义了一个MyList类

    包括的函数:

       getHead()返回头指针。

    isEmpty() 推断是否为空;

    addFirst(T element)在链表的头部增加元素。

    addLast(T element)在链表的尾部增加元。

    add(T fix,T element)在指定元素fix后插入新的元素

    remove(T element) 删除指定元素

    contains(T element)查看是否包括某元素

    printList()打印链表

    其它:

     使用泛型


    程序代码例如以下:

    public class MyList<T>{ //使用泛型  
        /*
        *  定义节点类Node
        */
        private static class Node<T>{ 
            T element;
            Node<T> next;
            Node(T element,Node<T> next){   //构造函数
                this.element = element;
                this.next = next;
            }
            Node(T element){                //构造函数
                this(element,null);  //调用上面的构造函数
            }
        }
    
        //定义MyList成员
        private Node<T> head;      //定义头结点
    
        /*
        *构造函数
        */
        MyList(){
            head = null;
        }
        /*
        *返回头指针
        */
        public Node<T> getHead(){
            return head; 
        }
        /*
        *查看链表是否为空
        */
        public boolean isEmpty(){
            return null == head; //推断是否为空
        }
        
        /*
        *将元素增加链表头
        */
        public void addFirst(T element){
            if(isEmpty()) head = new Node<T>(element);
            else   head = new Node<T>(element,head);   
        }
         /*
        *将元素增加链表尾
        */
        public void addLast(T element){
             if(isEmpty()) head = new Node<T>(element);//假设为空
             else {
                Node<T> node = head;        //不为空,就使用查找,知道表尾
                while(node.next != null) node = node.next;  
                node.next = new Node<T>(element);  
             }
        }
        /*
        *在指定元素后增加新元素
        */
        public boolean add(T fix,T element){
            if(isEmpty()) return false;
            else {
               Node<T> node = head;        //定义中间变量
               while(node.element != fix && null != node.next){//程序跳出条件为1、到表尾 2、找到这个元素
                    node = node.next;  //查找是否含有元素
               } 
               //这里採用直接使用while查找,而推断在while外面。能够加高速度
               if(node.element == fix){ //这里首先推断是否找到元素
                   node.next = new Node<T>(element,node.next) ;//将element插入。并将element的next指向下一个元素
                   return true;
               }
               else
                   return false;
            }
        }
        /*
        *删除指定元素
        */
        public boolean remove(T element){
            if(isEmpty()) return false;
               Node<T> node = head;        //定义变量pre 和 node
               Node<T> pre = null;
               while(node.element != element && null != node.next){ //程序跳出条件为1、到表尾 2、找到这个元素
                    pre = node;        //保存前面的变量
                    node = node.next;  //指向下一个元素
               } 
               if(node.element == element){
                 if(null == pre)    //假设是指定元素是第一个元素
                    head = head.next;
                 else   
                    pre.next = node.next;
             return true;
               }
               else
                   return false;
        }
        /*
        *查看是否包括某元素
        */
        public boolean contains(T element){
            if(isEmpty()) return false;
            else {
               Node<T> node = head;       
               while(node.element != element && null != node.next)//程序跳出条件为1、到表尾 2、找到这个元素 
                    node = node.next;  //不断指向下一个程序
               if(node.element == element)
                   return true;
               else
                   return false;
            }
        }
        /*
        *打印链表
        */
        public void printList(){
            if(isEmpty()){
                System.out.println("null");
            }
            else{
                for(Node<T> node=head; node!=null;node=node.next)
                    System.out.print(node.element +" ");
                System.out.println();       //打印回车
            }
        }
      
        public static void main(String[] args) {
            MyList<Integer> list = new MyList<Integer>();//若不加<Integer>便是为指定參数类型,将会警告
                                                //使用了未经检查或不安全的操作。
                                                //有关具体信息, 请使用 -Xlint:unchecked 又一次编译。
            for(int i=0; i<10; i++){
                list.addFirst(i);
            }
            list.printList();   //打印
            list.remove(0);     //删除
            list.printList();   //打印
            list.addLast(0);    //在尾部增加
            list.printList();   //打印
    
            list.add(7,-7);     //在7之后插入-7
            list.printList();   //打印
    
            if(list.contains(-7))
                System.out.println("is in the list !");
            else
                System.out.println("is not in the list !");
        }
    }


  • 相关阅读:
    给我买个糖?
    主题反馈
    Git:初始化项目、创建合并分支、回滚等常用方法总结
    tomcat
    tomcat
    docker
    oracle树形结构层级查询之start with ....connect by prior、level、order by以及sys_connect_by_path之浅谈
    java时间类Date、Calendar及用法
    java如何将html过滤为纯文本
    小记Java时间工具类
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6857229.html
Copyright © 2011-2022 走看看