class MyLinkedList {
private class ListNode {
public int val;
public ListNode next;
public ListNode(int val) {
this.val = val;
}
public ListNode() {
}
}
private ListNode dummy = new ListNode();
private int length = 0;
private ListNode tail = dummy;
public MyLinkedList() {
}
private ListNode getPreNode(int index) {
ListNode front = dummy.next;
ListNode back = dummy;
for (int i = 0; i < index; i ++) {
back = front;
front = front.next;
}
return back;
}
public int get(int index) {
if (index < 0 || index >= length) {
return -1;
}
return getPreNode(index).next.val;
}
public void addAtHead(int val) {
ListNode p = new ListNode(val);
p.next = dummy.next;
dummy.next = p;
if (tail == dummy) {
tail = p;
}
length ++;
}
public void addAtTail(int val) {
ListNode p = new ListNode(val);
tail.next = p;
tail = p;
length ++;
}
public void addAtIndex(int index, int val) {
if (index > length) {
return;
} else if (index == length) {
addAtTail(<