语言学习
自定义LinkedList
public class TestLinkedList01<E> {
private Node first;
private Node last;
private int size;
public void add(E e){
Node node = new Node(e);
if(null == first){
first = node;
last = node;
size++;
}else{
node.previous = last;
last.next = node;
last = node;
size++;
}
}
public void add(int index,E e){
Node node = new Node(e);
checkIndex(index);
Node nodeIndex = getNode(index);
if(nodeIndex != null){
Node up = nodeIndex.previous;
if(up != null){
up.next = node;
nodeIndex.previous = node;
node.next = nodeIndex;
node.previous = up;
}
if(index == 0){
first.previous = node;
node.next = first;
first = node;
}
}
size++;
}
public Object get(int index) {
checkIndex(index);
Node temp = first;
if (index <= (size >> 1)) {
for (int i = 0; i < index; i++) {
temp = temp.next;
}
} else {
temp = last;
for (int i = size - 1; i > index; i--) {
temp = temp.previous;
}
}
return temp != null ? temp.element : null;
}
public void remove(int index) {
checkIndex(index);
Node node = getNode(index);
if (node != null) {
Node up = node.previous;
Node down = node.next;
if (up != null) {
up.next = down;
}
if (down != null) {
down.previous = up;
}
if(index==0){
first = down;
}
if(index==size-1){
last = up;
}
}
size--;
}
public Node getNode(int index){
checkIndex(index);
Node temp = first;
if(index <= (size>>1)){
for (int i = 0; i < index; i++) {
temp = temp.next;
}
}else{
temp = last;
for (int i = size - 1; i > index; i--) {
temp = temp.previous;
}
}
return temp;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
Node temp = first;
if(temp == null){
sb.append("]");
}else{
while(temp != null){
if(temp.next == null){
sb.append(temp.element + "]");
}else{
sb.append(temp.element + ",");
}
temp = temp.next;
}
}
return sb.toString();
}
public void checkIndex(int index){
if(index < 0 || index > size - 1){
throw new RuntimeException("索引超出范围");
}
}
public static void main(String[] args) throws Exception {
TestLinkedList01<String> ts = TestLinkedList01.class.getConstructor().newInstance();
ts.add("a");
ts.add("b");
ts.add("c");
ts.add("d");
ts.add("e");
ts.add(0,"f");
System.out.println(ts);
System.out.println(ts.last.element);
System.out.println(ts.first.element);
}
}
public class Node {
Node previous;
Node next;
Object element;
public Node(Node previous, Node next, Object element) {
this.previous = previous;
this.next = next;
this.element = element;
}
public Node(Node previous, Node next) {
this.previous = previous;
this.next = next;
}
public Node(Object element) {
this.element = element;
}
}