class List<T> { private class Node { private T data; private Node next; private Node(T data) { if(data != null) this.data = data; } private void add(T data) { if(this.next == null) this.next = new Node(data); else this.next.add(data); } private void remove(Node previous, int index) { if(List.this.foot++ == index) { previous.next = this.next; this.next = null; List.this.count--; return; } else { this.next.remove(this,index); } } private void remove(Node previous, T data) { if(this.data.equals(data)) { previous.next = this.next; this.next = null; List.this.count--; return; } if(this.next != null) this.next.remove(this,data); else return ; } private void replace(int index, T data) { if(List.this.foot++ == index) this.data = data; else this.next.replace(index,data); } private void replace(T oldData, T newData) { if(this.data.equals(oldData)) this.data = newData; else this.next.replace(oldData,newData); } private T get(int index) { if(List.this.foot++ == index) return this.data; else return this.next.get(index); } private boolean contains(T data) { if(this.data.equals(data)) return true; if(this.next != null) return this.next.contains(data); else return false; } } //=============================================== private Node root; private int count; private int foot; public List() {} public boolean isEmpty() { if(this.count == 0 && this.root == null) return true; else return false; } public int size() { return this.count; } public void add(T data) { if(this.isEmpty()) this.root = new Node(data); else this.root.add(data); this.count++; } public void remove(int index) { if(this.isEmpty()) return; if(index < 0 || this.count <= index) return; if(index == 0) { Node temp = this.root; this.root = this.root.next; temp.next = null; this.count--; return; } else { this.foot = 0; this.root.remove(this.root, index); } } public void remove(T data) { if(this.isEmpty()) return ; if(this.root.data.equals(data)) { Node temp = this.root; this.root = this.root.next; temp.next = null; this.count--; return; } else { this.root.next.remove(this.root, data); } } public void replace(int index, T data) { if(this.isEmpty()) return; if(index < 0 || this.count<=index) return; this.foot = 0; this.root.replace(index,data); } public void replace(T oldData, T newData) { if(this.isEmpty()) return; this.root.replace(oldData,newData); } public T get(int index) { if(this.isEmpty()) return null; this.foot = 0; return this.root.get(index); } public boolean contains(T data) { if(this.isEmpty()) return false; return this.root.contains(data); } public Object[] toArray() { if(this.isEmpty()) return null; int count = this.count; Object[] retVal = new Object[count]; for(int i = 0; i < count; i++) { retVal[i] = this.get(i); } return retVal; } } public class Hello { public static void main(String[] args) throws Exception { List<String> myList = new List<String>(); myList.add("Hello"); myList.add("world"); myList.add("Ni"); myList.add("Hao"); myList.add("HeHe"); System.out.println(myList.contains(null)); Object[] result = myList.toArray(); for(Object item : result) { String temp = (String)item; System.out.println(temp); } } }