Java单链表实现

Java单链表实现:(head insert)

/**
 * single link, type: head insert
 * @param <E>
 */
public class SingleLinkList<E>{

    private int size;
    private Node first;

    private void linkFirst (E e) {
        first = new Node(size,e);
        size++;
    }

    /**
     * insert element
     * @param e
     */
    public void insertLinkElement (E e) {
        if (isEmpty()) {
            linkFirst(e);
        } else {
            Node temp = new Node(size, e);
            temp.next = first;
            first = temp;
            size ++;
        }

    }

    /**
     * remove element first
     * @return
     */
    public E deleteLinkElement () {
        return deleteLinkElement(size - 1); // delete link head
//        return deleteLinkElement(0);  delete link tail
    }

    /**
     * delete element by index.
     * @param index
     * @return if contains return e, if not contains return null;
     */
    public E deleteLinkElement(int index) {
        if (index >= size || index < 0) throw new IndexOutOfBoundsException("this link size is " + size + ", index is " + index);
        Node temp = first;
        Node prev;
        E value = null;
        if (first.index == index) {
            first = temp.next;
            value =  temp.getValue();
        } else {
            prev = first;
            temp = first.next;
            while (temp!= null) {
                if(temp.index == index) {
                    value = temp.e;
                    prev.next = temp.next;
                }
                if (temp.index >= index) prev.index --;
                prev = temp;
                temp = temp.next;
            }
        }
        size --;
        return value;
    }

    /**
     * delete element by element.
     * @param e
     * @return if contains return e, if not contains return null;
     */
    public E deleteLinkElement (E e) {
        int index = getIndex(e);
        if (index == -1) {
            return null;
        }
        return deleteLinkElement(index);
    }


    /**
     * get first element value
     * @return
     */
    public E getFirst () {
        if (isEmpty()) return null;
        return first.getValue();
    }

    /**
     * get element by index
     * @param index
     * @return
     */
    public E get (int index) {
        if (index >= size) throw new IndexOutOfBoundsException("this link size is " + size + ", index is " + index);
        Node temp = first;
        E value = null;
        while (temp!= null) {
            if(temp.index == index) {
                value = temp.e;
                break;
            }
            temp = temp.next;
        }
        return value;
    }

    /**
     * contains the element
     * @param e
     * @return false not ,  true contains
     */
    public boolean contains (E e) {
        Node temp = first;
        while (temp!= null) {
            if(temp.getValue() == e) {
               return true;
            }
            temp = temp.next;
        }
        return false;
    }


    /**
     * get element index
     * @param e
     * @return
     */
    public int getIndex (E e) {
        Node temp = first;
        while (temp!= null) {
            if(temp.getValue() == e) {
                return temp.index;
            }
            temp = temp.next;
        }
        return -1;
    }

    public boolean isEmpty () {
        return first == null;
    }

    public int getSize () {
        return size;
    }

    class Node {
        int index;
        E e;
        Node next;
        Node(int index, E e) {
            this.index = index;
            this.e = e;
        }
        public E getValue () {
            return e;
        }
    }

}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值