zoukankan      html  css  js  c++  java
  • 数据结构学习(四) 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();
        }
    }
    

      

  • 相关阅读:
    JVM深入理解(四)-内存模型【上】
    JVM深入理解(三)-加载与字节码执行
    JVM深入理解(二)-结构与内存管理
    初级正则表达式
    光弧,高亮
    substr,subString,split,slice,replace的区别
    SpringBoot配置SSLUnable to start ServletWebServerApplicationContext due to multiple ServletWebServerFa
    79:Python开发-sqlmapapi&Tamper&Pocsuite
    76:Python开发-内外网收集Socket&子域名&DNS
    77:Python开发-批量Fofa&POC验证&SRC提取
  • 原文地址:https://www.cnblogs.com/412013cl/p/11004493.html
Copyright © 2011-2022 走看看