单链表实现

创立节点类

public class Node {    /**     * 为了便于了解 不应用private润饰     */    Object data;//存储数据的援用    Node next;//下一个节点的援用public Node() {    }    public Node(Object data, Node next) {        this.data = data;        this.next = next;    } }

创立链表类

public class SingleLinkedList implements List {    private Node head = new Node();//头节点,不存储数据,为了编程不便        private int size;//一共有几个结点    }

查找第i 个节点的值

在单链表中进行查找操作只能从链表的首节点开始,通过每个节点的next 援用来顺次拜访链表中的每个节点,以实现相应的查找操作

public Object get(int i) {//如果i的地位谬误报异样        if (i<0 ||i >size){            throw new MyArrayIndexOutOfBoundsException("指针越界异样:"+"i");        }        //和程序表不一样了,不能通过索引间接定位,须要从头节点开始进行查找        //从头节点开始挪动指针        Node p = head;        for (int j = 0; j <= i; j++) {            p = p.next;        }        return p.data;    }

增加节点操作

增加节点不须要挪动元素,只须要批改元素的指针
须要先查找到增加地位i,再增加新节点

public void add(int i, Object e) {        //如果i的地位谬误报异样        if (i < 0 || i > size){            throw new MyArrayIndexOutOfBoundsException("指针越界异样:"+"i");        }        //找到前一个节点,从头节点head开始挪动指针        Node p = head;        for (int j = 0; j < i; j++) {            p = p.next;        }        //新创建一个节点        Node newNode = new Node(e,null);        //须要先指明新节点的间接后继节点,        newNode.next = p.next;        //再指明新节点的间接前驱节点        p.next = newNode;        //节点个数+1        size++;    }

删除节点操作

public Object remove(int i) {        if (i < 0 || i > size){            throw new MyArrayIndexOutOfBoundsException("指针越界异样:"+"i");        }        Node p = head;        for (int j = 0; j < i; j++) {            p = p.next;        }        Node temp = p.next;        p.next = temp.next;        temp.next = null;        size--;        return temp.data;    }