• 数据结构学习(四) Java链表实现


    package linklist;
    
    /**
     * @Title: LinkedListDemo
     * @ProjectName demo
     */
    public class LinkedListDemo<E> {
    
        private class Node {
            private E e;
            private Node next;
    
            public Node(E e, Node next) {
                this.e = e;
                this.next = next;
            }
            public Node(E e) {
                this(e, null);
            }
    
            public Node() {
                this(null, null);
            }
    
            @Override
            public String toString() {
                return e.toString();
            }
        }
    
        private int size;
        private Node dummyHead;
    
        public LinkedListDemo() {
            size = 0;
            dummyHead = new Node();
        }
    
        public int getSize() {
            return this.size;
        }
    
        public boolean isEmpty() {
            return size == 0;
        }
    
        public void add(int index, E e) {
            if (index < 0 || index > size) {
                throw new IllegalArgumentException("add error index.");
            }
            Node prev = dummyHead;
            for (int i = 0; i < index; i++) {
                prev = prev.next;
            }
            prev.next = new Node(e, prev.next);
            size ++;
        }
    
        public void addFirst(E e) {
            add(0, e);
        }
    
        public void addLast(E e) {
            add(size, e);
        }
    
        public E remove(int index) {
            if (index < 0 || index >= size) {
                throw new IllegalArgumentException("remove error index.");
            }
            Node prev = dummyHead;
            for (int i = 0; i < index; i++) {
                prev = prev.next;
            }
            Node curNode = prev.next;
            prev.next = curNode.next;
            curNode.next = null;
            return curNode.e;
        }
    
        public E removeFirst() {
            return remove(0);
        }
    
        public E removeLast() {
            return remove(size - 1);
        }
        public void removeElement(E e){
            Node prev = dummyHead;
            while (prev.next != null) {
                if (prev.next.e.equals(e)) {
                    break;
                }
                prev = prev.next;
            }
            if (prev.next != null) {
                Node delNode = prev.next;
                prev.next = delNode.next;
                delNode.next = null;
                size --;
            }
        }
    
        public void set(int index, E e) {
            if (index < 0 || index > size) {
                throw new IllegalArgumentException("set error index");
            }
            Node cur = dummyHead.next;
            for (int i = 0; i < index; i++) {
                cur = cur.next;
            }
            cur.e = e;
        }
    
        public E get(int index) {
            if (index < 0 || index >= size) {
                throw new IllegalArgumentException("Get error index");
            }
            Node cur = dummyHead.next;
            for (int i = 0; i < index; i++) {
                cur = cur.next;
            }
            return cur.e;
        }
    
        public E getFirst() {
            return get(0);
        }
    
        public E getLast() {
            return get(size - 1);
        }
            
        
        public boolean contains(E e) {
            Node cur = dummyHead.next;
            while (cur != null) {
                if (cur.e.equals(e)) {
                    return true;
                }
                cur = cur.next;
            }
            return false;
        }
    
        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            for (Node cur = dummyHead.next; cur != null; cur = cur.next) {
                sb.append(cur.toString() + "--->");
            }
            sb.append("NULL");
            return sb.toString();
        }
    }
    

      

  • 相关阅读:
    php代码覆盖率执行
    如何更好的理解(pageX,pageY,clientX,clientY,eventX,eventY,scrollX,scrollY,screenX,screenY,event.offsetX,event.offsetY,offsetLeft,style.left)
    那些曾经纠结的大小写敏感
    jQuery中的经典动画
    月末总结
    小议jQuery中的事件
    DOM操作在jQuery中的实用------文字提示和图片提示
    HTML之表单元素
    http cookie
    HTML常用字符
  • 原文地址:https://www.cnblogs.com/412013cl/p/11004493.html
Copyright © 2020-2023  润新知