首页 > 其他 > 详细

单向链

时间:2019-06-07 15:07:59      阅读:73      评论:0      收藏:0      [点我收藏+]

啥话都不说了,上代码吧,代码中我加了注释。

package cn.lu.linklist;
//单向链表的类
public class LinkList<T> {
    private Cell<T> first;//链头定义

    //新的空链的无参构造
    public LinkList() {
        first=new Cell<T>();
    }
    //带参构造的方法(尾部添加法)
    public LinkList(T[] data){
          
          first = new Cell<T>(); // 头结点
          Cell<T> end = first;
          Cell<T> temp = null;
          //将形参传入链中
          for (T t : data) {
            temp = new Cell<T>();//必须new,否则temp.next的最终不为空
            temp.setData(t);
            end.setNext(temp);
            end = temp;
        }
     }
    //在链中指定位置插入数据
    public boolean insert(T t, int index) {
        int count = 0;
        Cell<T> pointer = first;//定义指针变量
        Cell<T> temp = null;//临时变量
        //插入链的位置值不能小于1(默认链已经有了头节点)
        if (index < 1)
            throw new ArrayIndexOutOfBoundsException();
        //指针移动到指定的位置(index位置的前一个,默认值是从0开始的)
        while (pointer != null && count < index - 1) {
            pointer = pointer.getNext();
            count++;
        }
        //指针位置为空时就报错(插入的位置超出链长)
        if (pointer == null)
            throw new ArrayIndexOutOfBoundsException();
        //在指定位置插入数据
        else {
            temp = new Cell<T>();
            temp.setData(t);//需要插入的数据赋值给临时变量
            temp.setNext(pointer.getNext());//把要插入数据的next指向index位置的数据
            pointer.setNext(temp);//把指针位置的next指向要插入的数据
        }
        return true;
    }

    //在链中的指定位置删除数据
    public Boolean remove(int index) {
         
        int count = 0;
        Cell<T> pointer = first;  //定义指针变量
        Cell<T> temp = null;    //定义临时变量
        //如果要删除链中的位置不能小于1
        if (index < 1)
            throw new ArrayIndexOutOfBoundsException();
        //指针移动到指定的位置(index位置的前一个,默认值是从0开始的)
        while (pointer != null && count < index - 1) {
            pointer = pointer.getNext();
            count++;
        }
        //要删除的数据位置超过了链长度
        if (pointer== null)
            throw new ArrayIndexOutOfBoundsException();
        //删除数据的操作开始
        else {
            temp = pointer.getNext();//临时变量赋值给要删除的数据
            pointer.setNext(temp.getNext());//把当前指针数据的next指向要删除数据的下一个数据
        }
        return true;
    }
    //替换指定位置的数据
    public boolean replace(int index, T t) {
         
        int count = 0;
        Cell<T> pointer = first;//定义指针变量
        
        //要替换链中的位置不能小于1
        if (index < 1)
            throw new ArrayIndexOutOfBoundsException();
        //指针移动到要替换的位置
        while (pointer!= null && count < index) {
            pointer = pointer.getNext();
            count++;
        }
        //判断当前指针位置不能超出链长度
        if (pointer == null)
            throw new ArrayIndexOutOfBoundsException();
        //替换数据开始操作
        else{
            //注意此时没有改变pointer的next值,只是将pointer的Data替换成t。
            pointer.setData(t);
            
        }
        return true;
    }
    //获得指定位置的数据链值
    public T get(int index) {
         
        int count = 0;
        Cell<T> pointer = first;//定义指针变量
        //要替换链中的位置不能小于1
        if (index < 1)
            throw new ArrayIndexOutOfBoundsException();
        //指针移动到指定位置
        while (pointer != null && count < index) {
            pointer = pointer.getNext();
            count++;
        }
        //判断当前指针位置不能超出链长度
        if (pointer == null)
            throw new ArrayIndexOutOfBoundsException();
        else
            return pointer.getData();
 
    }
    //判断数据链是否为空
    public boolean isEmpty(){
        
        if(first.getNext() == null)
            return true;
        
        return false;
    }
    //计算数据链长度
    public int size() {
         
        int count = 0;
        Cell<T> pointer = first; //定义指针变量
        
        while (pointer.getNext() != null) {
            pointer = pointer.getNext();
            count++;
        }
        return count;
    }
    //链的toString方法
    public String toString() {
         
        String str = "[";//起始符输出
        Cell<T> pointer = first;
        //移动指针判断循环的条件
        while (pointer!= null) {
            pointer = pointer.getNext();//移动指针
            //指针位置不为能为空
            if (pointer != null) {
                //当指针位置的下一个不为空时的输出。
                if (pointer.getNext() != null){
                    str = str + pointer.getData() + ",";
                    }
                //当指针位置的下一个为空时
                else{
                    str = str + pointer.getData();
                    }
            }
        }
        str = str + "]";//结束符输出
        return str;
    }

    
    
}

 

单向链

原文:https://www.cnblogs.com/shqnl/p/10988140.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!