classMyLinkedList{int size;ListNode head;// sentinel node as pseudo-headpublicMyLinkedList(){
size =0;
head =newListNode(0);}publicintget(int index){if(index <0|| index >= size)return-1;ListNode curr = head;for(int i =0; i < index +1;++i) curr = curr.next;return curr.val;}publicvoidaddAtHead(int val){addAtIndex(0, val);}publicvoidaddAtTail(int val){addAtIndex(size, val);}publicvoidaddAtIndex(int index,int val){if(index > size)return;if(index <0) index =0;++size;ListNode pred = head;for(int i =0; i < index;++i) pred = pred.next;ListNode toAdd =newListNode(val);
toAdd.next = pred.next;
pred.next = toAdd;}publicvoiddeleteAtIndex(int index){if(index <0|| index >= size)return;
size--;ListNode pred = head;for(int i =0; i < index;++i) pred = pred.next;
pred.next = pred.next.next;}}/**
* Your MyLinkedList object will be instantiated and called as such:
* MyLinkedList obj = new MyLinkedList();
* int param_1 = obj.get(index);
* obj.addAtHead(val);
* obj.addAtTail(val);
* obj.addAtIndex(index,val);
* obj.deleteAtIndex(index);
*/