链表

 

为什么链表很重要?

链表是真正的动态数组。

是最简单的动态数据结构。

更深入的理解引用(或者指针)。

更深入的理解递归。

它可以用来辅助组成其他数据结构。

链表LinkedList

数据存储在节点(Node)中。

Class Node {

  E e;

  Node next;

}

优点:真正的动态,不需要处理固定容量的问题;

缺点:丧失了随机访问的能力;

 

数组和链表的对比:

数组最好用来索引有语义的情况;

最大的优点:支持快速查询。

链表不适用索引有语义的情况

最大的优点:动态

 

在链表中添加元素

public class LinkedList<E> {
    private class Node {
        public E e;
        public Node next;

        public Node(E e,Node next){
            this.e = e;
            this.next = next;
        }

        public Node(E e){
            this.e = e;
            this.next = null;
        }

        public Node(){
            this.e = null;
            this.next = null;
        }

        @Override
        public String toString(){
            return e.toString();
        }
    }

    private Node head;
    int size;

    public LinkedList(){
        head = null;
        size = 0;
    }

    //可以尝试传进来一个数组,把数组转换成链表的构造函数

    //获取链表中的元素个数
    public int getSize(){
        return size;
    }

    //返回链表是否为空
    public boolean isEmpty(){
        return size == 0;
    }

    //在链表头添加新的元素e
    public void addFirst(E e){
        /*Node node = new Node(e);
        node.next = head;
        head = node ;*/

        head = new Node(e,head);
        size ++;
    }

    //在链表的index(o-based)位置添加新的元素e
    //在链表中不是一个常用的操作,练习用:)
    public void add(int index,E e){
        if(index < 0 || index > size)
            throw new IllegalArgumentException("Add failed.Illegal index.");

        if(index == 0){
            addFirst(e);
        } else{

            Node prev = head;
            for(int i = 0; i < index - 1; i ++){
                prev = prev.next;
            }

            /*Node node = new Node(e);
            node.next = prev.next;
            prev.next = node;*/

            prev.next = new Node(e,prev.next);
            size ++;
        }
    }

    //在链表末尾添加新的元素e
    public void addLast(E e){
        add(size,e);
    }
}

 

posted on 2022-07-25 21:51  网恋被骗两千八  阅读(21)  评论(0编辑  收藏  举报