package Method; import org.omg.Messaging.SYNC_WITH_TRANSPORT; import serial.MyBaseBean; /** * Created by joyce on 2019/10/25. */ public class MyLink<T> { private MyNode<T> firstNode; private MyNode<T> lastNode; private Integer length = 0; public String toString() { MyNode<T> node = firstNode; if(node == null) System.out.println(node); while (node != null) { System.out.println(node.getT()); node = node.nextNode; } return null; } public T get(int index) { if(index >= length) throw new RuntimeException(); MyNode<T> node = firstNode; for(int j=0; j<index; ++j) { node = node.nextNode; } return node.getT(); } public static void main(String [] f) { MyLink<Integer> myLink = new MyLink<>(); myLink.add(1); myLink.add(2); myLink.add(3); myLink.add(4); myLink.toString(); // 删尾 myLink.remove(3); myLink.toString(); // 删中间 myLink.remove(1); myLink.toString(); // 删头节点 myLink.remove(0); myLink.toString(); // 删唯一节点 myLink.remove(0); // 没节点 myLink.toString(); myLink.remove(0); } public void add(T t) { MyNode<T> node = new MyNode<T>(t); if(length == 0) { firstNode = lastNode = node; } else { lastNode.setNextNode(node); lastNode = node; } ++length; } public void remove(int index) { if(index >= length) throw new RuntimeException(); if(length == 1) { firstNode = null; lastNode = null; } else if(index == 0) { firstNode = firstNode.nextNode; } else if(length - 1 == index) { MyNode<T> node = firstNode; for(int j=0; j<index -1; ++j) { node = node.nextNode; } lastNode = node; node.nextNode = null; } else { MyNode<T> node = firstNode; for(int j=0; j<index -1; ++j) { node = node.nextNode; } node.nextNode = node.nextNode.nextNode; } --length; } private static class MyNode<T> { private T t; private MyNode<T> nextNode; public MyNode(T t) { this.t = t; } public T getT() { return t; } public void setT(T t) { this.t = t; } public MyNode<T> getNextNode() { return nextNode; } public void setNextNode(MyNode<T> nextNode) { this.nextNode = nextNode; } } }
输出:
1
2
3
4
1
2
3
1
3
3
null
java.lang.RuntimeException
at Method.MyLink.remove(MyLink.java:75)
at Method.MyLink.main(MyLink.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)