/*数据结构单向链表基本操作节点类 */import java.util.Iterator;import java.util.function.Consumer;public class shujujiegou implements Iterable {//整体    private Node head;//头指针    @Override    public Iterator iterator() {        //匿名内部类->带名字的内部类        return new NodeIterator();    }    private class NodeIterator implements Iterator {        Node p=head;        @Override        public boolean hasNext() {//是否有下一个元素            return p!=null;//不空返回真        }        @Override        public Integer next() {//返回当前值,并指向下一个元素            int v=p.value;            p=p.next;            return v;        }    }    private static class Node {        int value;//值        Node next;//下一个节点指针        public Node(int value, Node next) {            this.value = value;            this.next = next;        }    }    public void addFirst(int value) {        //1.链表为空        // head=new Node(value,null);        //2.链表非空(头插)        head = new Node(value, head);    }//遍历链表    //Params:consumer-要执行的操作    public void loop(Consumer consumer) {        Node p = head;        while (p != null) {            consumer.accept(p.value);            p = p.next;        }    }//遍历链表2    //Params:consumer-要执行的操作    public void loop2(Consumer consumer) {        for (Node p = head; p != null; p = p.next){            consumer.accept(p.value);        }    }    private Node findLast(){        if(head==null){            return null;        }        Node p;        for(p=head;p.next!=null;p=p.next){        }        return p;    }    public void addLast(int value){        Node last=findLast();        if(last==null){            addFirst(value);            return;        }        last.next=new Node(value,null);    }  /* public void test(){        int i=0;        for(Node p=head;p!=null;p=p.next,i++){            System.out.println(p.value+"索引是:"+i);        }        根据索引查找Params:index-索引Returns:找到,返回该索引位置节点的值Throws:IlLegalArgumentException-找不到,抛出index非法异常   }*/    private Node findNode(int index){//给定索引位置        int i=0;        for(Node p=head;p!=null;p=p.next,i++){            if(i==index){                return p;            }        }        return null;//没找到    }    public int get(int index) throws IllegalAccessException {        Node node=findNode(index);        if(node==null){            //抛异常            illegalIndex(index);        }        return node.value;    }    //异常处理(重点)    private static void illegalIndex(int index) throws IllegalAccessException {        throw new IllegalAccessException(                String.format("index[%d] 不合法%n", index)        );    }    /*向索引位置插入 */    public void insert(int index,int value) throws IllegalAccessException {        if(index==0){            addFirst(value);            return;        }        Node prev=findNode(index-1);//找到上一个节点        if(prev==null){            illegalIndex(index);        }        prev.next=new Node(value,prev.next);    }//1.问题    //删除头节点    public void removeFirst() throws IllegalAccessException {        if(head==null) {             illegalIndex(0);        }        head=head.next;    }    public void remove(int index) throws IllegalAccessException {        if(index==0){            removeFirst();            return;        }        Node prev=findNode(index-1);//上一个节点        if(prev==null){            illegalIndex(index);        }        Node removed=prev.next;//被删除的节点        if(removed==null){            illegalIndex(index);        }        prev.next=removed.next;    }}