java 实现链式储存结构的线性表

java 实现链表

用节点类储存数据。

代码


/**
 * 链表储存结构实现顺序表
 * @param <E>
 */
public class LinkedList<E> {
    // 头节点
    private LinkedNode<E> first;
    // 尾节点
    private LinkedNode<E> last;
    // 顺序表内储存的数据个数
    private int size = 0;
    // 初始化
    public LinkedList(){
        first = new LinkedNode<>(); // 空的头节点
        last = first;
    }
    // 获取总元素个数
    public int getSize(){
        return size;
    }
    // 添加元素
    public void add(E e){
        LinkedNode<E> node = new LinkedNode<>();
        node.setData(e);
        last.next = node;
        last = node;
        size++;
    }

    // 在某一位置插入数据
    public void add(int index, E e){
        if(index > size)
            System.out.println("插入位置错误!!!");
        else{
            LinkedNode<E> node = new LinkedNode<>();
            LinkedNode<E> head = first;
            node.setData(e);
            // 找到要插入位置的前一个节点
            for(int i = 0;i < index;i ++){
                head = head.next;
            }
            // 插入末尾,改变尾节点
            if(index == size){
                last = node;
            }
            node.next = head.next;
            head.next = node;
            size ++;
        }
    }

    // 删除某一位置的元素
    public E remove(int index){
        E e = null;
        if(index > size - 1 || size == 0)
            System.out.println("删除位置错误!!!");
        else{

            // 找到要删除的节点的前一个
            LinkedNode<E> node = first;
            for(int i = 0;i < index;i ++){
                node = node.next;
            }
            // 如果删除的是最后一个元素,改变尾节点
            if(index == size -1){
                last = node;
            }
            e = node.next.getData();
            node.next = node.next.next;
            size --;
        }
        return e;
    }

    // 删除第一个元素
    public E removeFirst(){
        return remove(0);
    }
    // 删除最后一个元素
    public E removeLast(){
        return remove(size - 1);
    }

    // 获取某一位置的元素
    public E get(int index){
        E e = null;
        if(index > size - 1 || size == 0)
            System.out.println("查找位置错误!!!");
        else{
            // 找到要查找的节点
            LinkedNode<E> node = first.next;
            for(int i = 0;i < index;i ++){
                node = node.next;
            }
            e = node.getData();
        }
        return e;
    }

    // 获取第一个元素
    public E getFirst(){
        E e = null;
        if(size != 0)
            e = first.next.getData();
        return e;
    }

    // 获取第最后一个元素
    public E getLast(){
        E e = null;
        if(size != 0)
            e = last.getData();
        return e;
    }

}


/**
 * 链表节点
 * @param <E>
 */
public class LinkedNode<E> {
    private E data; // 储存的数据
    public LinkedNode<E> next;

    // 给该节点数据赋值
    public void setData(E e){
        data = e;
    }

    // 获取该节点数据值
    public E getData(){
        return data;
    }
}

package 线性表;

/**
 * 链表测试类
 */
public class LinkedList_Demo {

    // 输出相关数据
    public static void print(LinkedList linkedList){
        System.out.println("元素个数:" + linkedList.getSize());
        System.out.println(linkedList.getFirst());
        System.out.println(linkedList.get(1));
        System.out.println(linkedList.getLast());
    }

    public static void main(String[] args){
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("the");
        linkedList.add(0,"hello");
        linkedList.add(2,"word!");

        print(linkedList);

        // 删除两个
        linkedList.remove(0);
        linkedList.remove(0);

        System.out.println("元素个数:" + linkedList.getSize());

        // 添加元素
        linkedList.add("www");
        linkedList.add(0,"http://");

        print(linkedList);

    }
}

结果:
元素个数:3
hello
the
word!
元素个数:1
元素个数:3
http://
word!
www

上一篇:LinkedList源码解析


下一篇:List接口:ArrayList,Vector,LinkedList