有add(v)
add(i.v)
remove(i)
get(i)
public class TowWayLinkListimplements Iterable { private class Node{ //当前节点的值 private U item; //当前节点上一个值 private Node pre; //当前节点下一个值 private Node next; public Node(Node pre,U item, Node next){ this.item = item; this.pre = pre; this.next = next; } } //第一个节点 private Node first; //最后一个节点 private Node last; //链表长度 private int N; public TowWayLinkList(){ //初始化节点 N=0; } public void add(T v){ Node l = last; //创建新的节点,把节点指向前一个节点 Node newNode = new Node<>(l, v, null); last = newNode; //判断最后一个节点是否为空 if(l == null){ first = newNode; }else{ l.next = newNode; } N++; } public void add(int i,T v){ if(i <0|| i >N){ throw new RuntimeException("索引超限"); } //判断大小 //如果放的位置 if(i == N){ //直接放在最后 add(v); }else{ //原节点 Node current = getNode(i); //原节点的上一个节点 Node pre = current.pre; Node nowData = new Node<>(pre, v, current); if(pre == null){ first = nowData; }else{ current.pre = nowData; pre.next = nowData; } } N++; } public T get(int i){ return getNode(i).item; } private Node getNode(int i){ if(i < 0||i >= N){ throw new RuntimeException("索引超限"); } //得到信息 if(i < (N >> 1)){ Node x = first; for (int j = 0; j < i; j++) { x = x.next; } return x; }else{ Node x = last; for (int j = N-1; j > i; j--) { x = x.pre; } return x; } } public void remove(int i){ if(i < 0||i> N){ throw new RuntimeException("索引超限"); } if(i == N-1){ //干掉最后一个 Node a = last; //前一个 Node pre = a.pre; pre.next = null; last = pre; }else if(i == 0){ Node a = first; Node next = a.next; next.pre = null; first = next; }else{ //中间 Node a = getNode(i); Node pre = a.pre; Node next = a.next; pre.next = next; next.pre = pre; } N--; } public static void main(String[] args) { LinkedList lis1 = new LinkedList(); lis1.add(0, "2"); lis1.get(0); // System.out.println(16 >> 1); TowWayLinkList list = new TowWayLinkList<>(); list.add("111"); list.add("2222"); list.add("222232"); list.add("2222q111"); list.add("212121"); // list.add(4,"22222"); //索引超限 // list.add(3, "333333333"); // list.add(2,"22222222222"); // list.add(0, "0000000"); //第一个位置 // list.remove(5);//索引超限 // list.remove(4); // list.remove(0); // list.remove(2); // list.remove(0); // System.out.println(list.get(0)); System.out.println("-------------"); Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } @Override public Iterator iterator() { return new LIterator(); } private class LIterator implements Iterator { private Node next; private Node lastReturned; private int nextInt; public LIterator(){ nextInt = 0; this.next = first; } @Override public boolean hasNext() { return nextInt < N; } @Override public T next() { lastReturned = next; //并把下一个数据数据传给next next = next.next; nextInt++; //返回当前数据 return (T) lastReturned.item; } } }
迭代器可能优点问题,超了索引,下次优化下。



